Aslında, sanal yığın boyutu olan 8388608 bayt (8 MB). Elbette, bunun doğru olamayacağı sonucuna varmak doğaldır, çünkü bu, her bir iş parçacığı için bir miktar KB'nin% 99'u muhtemelen ihtiyaç duydukları her zaman yığını için tüketmesi çok saçma bir bellek miktarıdır.
İyi haber şu ki konu başlığınız sadece ihtiyaç duyduğu fiziksel hafıza miktarını kullanıyor . Bu, işletim sisteminizin işlemcinizdeki donanım Bellek Yönetim Birimi'ni (MMU) kullanmasından elde edilen sihirli güçlerden biridir. İşte olanlar:
İşletim sistemi, iş parçanız için MMU sayfa tablolarını ayarlayarak yığınıza 8 MB sanal bellek ayırır. Bu, yalnızca sayfa tablosu girişlerini tutmak için çok az RAM gerektirir.
İş parçanız çalışır ve henüz kendisine atanmış fiziksel bir sayfa içermeyen yığın üzerinde sanal bir adrese erişmeye çalıştığında, "sayfa hatası" adı verilen bir donanım istisnası MMU tarafından tetiklenir.
CPU çekirdeği, ayrıcalıklı bir çalıştırma moduna (kendi yığınına sahip olan) geçerek ve çekirdeğin içindeki sayfa hatası istisna işleyici işlevini çağırarak sayfa hatası istisnasına yanıt verir.
Çekirdek, bu sanal bellek sayfasına bir fiziksel RAM sayfası ayırır ve kullanıcı alanı başlığına geri döner.
Kullanıcı alanı iş parçacığı bu işin hiçbirini görmez. Bakış açısından, sadece yığını boyunca sanki yığını kullanır. Bu arada, istif, iplik ihtiyaçlarını karşılamak için otomatik olarak büyür (veya olmaz).
MMU, günümüzün bilgisayar sistemlerinin donanımının önemli bir parçasıdır. Özellikle, sistemdeki birçok "sihir" den sorumludur, bu yüzden MMU’nun ne yaptığı ve genel olarak sanal bellek hakkında daha fazla şey öğrenmenizi tavsiye ederim. Ayrıca, uygulamanız performans açısından hassas ve önemli miktarda veriyle ilgileniyorsa, TLB'nin (MMU sayfa tablosu önbelleği) nasıl çalıştığını ve TLB isabet oranınızı en üst düzeye çıkarmak için verilerinizi veya algoritmalarınızı nasıl yeniden yapılandırabileceğinizi anlamalısınız.
8388608 / 1024 = 8192
.