Sebenarnya, ukuran tumpukan virtual Anda adalah 8388608 byte (8 MB). Tentu saja, wajar untuk menyimpulkan bahwa ini tidak mungkin benar, karena itu adalah jumlah memori yang sangat besar untuk dikonsumsi oleh setiap utas untuk tumpukannya ketika 99% dari waktu mungkin diperlukan beberapa KB.
Berita baiknya adalah utas Anda hanya menggunakan jumlah memori fisik yang sebenarnya dibutuhkan. Ini adalah salah satu kekuatan ajaib yang diperoleh OS Anda dari menggunakan perangkat keras Memory Management Unit (MMU) di prosesor Anda. Inilah yang terjadi:
OS mengalokasikan 8 MB memori virtual untuk tumpukan Anda dengan mengatur tabel halaman MMU untuk utas Anda. Ini membutuhkan sangat sedikit RAM untuk menyimpan entri tabel halaman saja.
Ketika utas Anda berjalan dan mencoba mengakses alamat virtual pada tumpukan yang belum memiliki halaman fisik yang ditetapkan untuknya, pengecualian perangkat keras yang disebut "kesalahan halaman" dipicu oleh MMU.
Inti CPU merespons pengecualian kesalahan halaman dengan beralih ke mode eksekusi istimewa (yang memiliki tumpukan sendiri) dan memanggil fungsi penanganan pengecualian kesalahan halaman di dalam kernel.
Kernel mengalokasikan halaman RAM fisik ke halaman memori virtual dan kembali ke utas ruang pengguna.
Utas ruang pengguna tidak melihat satupun dari pekerjaan itu. Dari sudut pandangnya, ia hanya menggunakan tumpukan seolah-olah memori ada di sana selama ini. Sementara itu, tumpukan secara otomatis tumbuh (atau tidak) untuk memenuhi kebutuhan utas.
MMU adalah bagian penting dari perangkat keras sistem komputer saat ini. Secara khusus, ini bertanggung jawab untuk banyak "keajaiban" dalam sistem, jadi saya sangat merekomendasikan belajar lebih banyak tentang apa yang dilakukan MMU, dan tentang memori virtual secara umum. Selain itu, jika aplikasi Anda peka terhadap kinerja dan berurusan dengan sejumlah besar data, Anda harus memahami cara kerja TLB (cache tabel halaman MMU) dan bagaimana Anda dapat menyusun kembali data atau algoritme Anda untuk memaksimalkan tingkat hit TLB Anda.
8388608 / 1024 = 8192
.