Uygulamada, yığını büyütmek zor (ve bazen imkansız). Neden biraz sanal bellek anlamayı gerektirdiğini anlamak için.
Tek iş parçacıklı uygulamalar ve bitişik hafızanın Ye Olde Günleri'nde üç, bir işlem adres alanının üç bileşeniydi: kod, yığın ve yığın. Bu üçünün nasıl kullanıldığının işletim sistemine bağlı olmasına rağmen, genellikle kod ilk önce belleğin altından başlayarak, öbek sıraya geldi ve yukarı doğru büyüdü ve yığın hafızanın en üstünde başladı ve aşağı doğru büyüdü. İşletim sistemi için ayrılan bir bellek de vardı, ancak bunu görmezden gelebiliriz. O günlerde programlar biraz daha dramatik yığın taşmalarına sahipti: yığın yığına çarpacak ve hangisinin önce güncellendiğine bağlı olarak ya kötü verilerle çalışacak ya da bir alt yordamdan hafızanın keyfi bir bölümüne geri dönecekti.
Bellek yönetimi bu modeli biraz değiştirdi: programın bakış açısına göre hala bir süreç bellek haritasının üç bileşenine sahiptiniz ve genel olarak aynı şekilde düzenlenmişlerdi, ancak şimdi bileşenlerin her biri bağımsız bir bölüm olarak yönetildi ve MMU, İşletim sistemi, programın bir segment dışındaki belleğe erişmeye çalıştığı durumlarda. Sanal hafızası vardı sonra, orada gerek vardı ya arzu onun tüm adres alanına bir program erişimi vermek için. Böylece segmentlere sabit sınırlar verildi.
Öyleyse neden bir programa tam adres alanına erişim vermek istenmiyor? Çünkü bu hafıza takas aleyhinde bir "taahhüt yükü" teşkil eder; herhangi bir zamanda bir programın hafızasının bir kısmı veya tamamı başka bir programın hafızasına yer açmak için değiştirilebilir. Eğer her program potansiyel olarak 2GB takas alabilirse, ya tüm programlarınız için yeterli takas sağlamanız ya da iki programın alabileceğinden daha fazla ihtiyaç duyma şansını yakalamanız gerekir.
Bu noktada, yeterli sanal adres alanı varsaysak, olabilir gerekirse bu segmentleri artırma ve veri segmenti (yığın) aslında zaman içinde büyümek demek: Eğer küçük bir veri segmenti ile başlar ve bellek ayırıcısı fazla yer zaman istediğinde gerekli. Bu noktada, tek bir yığınla yığın bölümünü genişletmek fiziksel olarak mümkün olurdu: İşletim sistemi bölüm dışına bir şey itme ve daha fazla bellek ekleme girişimini yakalayabilir. Ancak bu da özellikle istenmez.
Çoklu iş parçacığı girin. Bu durumda, her iş parçacığının bağımsız bir yığın kesimi vardır, yine sabit boyutludur. Ancak şimdi sanal adres alanında bölümler birbiri ardına sıralanmıştır, bu nedenle bir bölümü diğerini hareket ettirmeden genişletmenin bir yolu yoktur - çünkü bunu yapmadan önce programın yığında yaşayan hafızayı işaret edecek potansiyele sahip olması muhtemeldir. Alternatif olarak bölümler arasında bir miktar boşluk bırakabilirsiniz, ancak bu alan neredeyse her durumda boşa gider. Uygulama geliştiricisinin yükünü koymak daha iyi bir yaklaşımdı: gerçekten derin yığınlara ihtiyacınız varsa, iş parçacığını oluştururken bunu belirtebilirsiniz.
Bugün, 64 bitlik bir sanal adres alanıyla, sonsuz sayıda iplik için etkili bir şekilde sonsuz yığınlar oluşturabildik. Fakat yine de, bu özellikle istenen bir durum değil: neredeyse her durumda, bir yığın taşması kodunuzla ilgili bir hata olduğunu gösterir. Size 1 GB'lık bir yığın sağlamak, yalnızca bu hatanın keşfedilmesini önler.