Misalnya, di OSX, bahkan kurang dari 512k.
Apakah ada ukuran yang disarankan, mengingat, bahwa aplikasi tidak menggunakan rekursi dan tidak mengalokasikan banyak variabel stack ?
Saya tahu pertanyaannya terlalu luas dan sangat tergantung pada penggunaannya, tetapi masih ingin bertanya, karena saya bertanya-tanya apakah ada alasan tersembunyi / internal / sistem di balik jumlah yang sangat besar ini.
Saya bertanya-tanya, ketika saya berniat untuk mengubah ukuran tumpukan menjadi 512 KiB di aplikasi saya - ini masih terdengar seperti jumlah yang sangat besar untuk ini, tetapi ini jauh lebih kecil dari 8MiB - dan akan menyebabkan memori virtual proses tersebut menurun secara signifikan, karena saya punya banyak utas (I / O).
Saya juga tahu ini tidak terlalu menyakitkan, dijelaskan di sini : Ukuran tumpukan default untuk pthreads
sumber
Jawaban:
Seperti yang orang lain katakan, dan seperti yang disebutkan dalam tautan yang Anda berikan dalam pertanyaan Anda, memiliki tumpukan 8MiB tidak melukai apa pun (selain mengkonsumsi ruang alamat - pada sistem 64-bit yang tidak masalah).
Linux telah menggunakan tumpukan 8MiB untuk waktu yang sangat lama; perubahan diperkenalkan pada versi 1.3.7 dari kernel, pada Juli 1995. Saat itu disajikan sebagai pengantar batas, sebelumnya tidak ada satu:
Di Linux, batas tumpukan juga memengaruhi ukuran argumen program dan lingkungan, yang dibatasi hingga seperempat batas tumpukan ; kernel memberlakukan minimal 32 halaman untuk argumen dan lingkungan.
Untuk utas, jika batas tumpukan (
RLIMIT_STACK
) tidak terbatas,pthread_create
terapkan batasnya sendiri untuk tumpukan utas baru - dan pada kebanyakan arsitektur, itu kurang dari 8MiB.sumber
top
ditampilkan dalam hasil VIRT yang menakutkan. Meskipun, menggali sedikit lebih dalam, sebagian besar ruang alamat virtual ini diambil dari arena per thread (memori), bukan dari ukuran tumpukan, jadi menurunkan ukuran tumpukan tidak akan secara drastis mengurangi memori virtual. Saya hanya ingin tahu mengapa 8MiB dan mengapa begitu banyak.top
memberi Anda jawaban yang jauh lebih baik untuk "apa memori proses ini sebenarnya menggunakan" daripada VIRT.8MB adalah ukuran virtual tumpukan. Kesalahan halaman akan terjadi ketika aplikasi Anda mencoba menggunakan lebih banyak tumpukan daripada yang saat ini dialokasikan secara fisik. Penangan kesalahan halaman kernel kemudian akan mengalokasikan halaman fisik dan kemudian aplikasi Anda akan melanjutkan.
Lihat https://unix.stackexchange.com/a/280865/21212 untuk penjelasan lengkap.
Jadi mengurangi ukuran tumpukan Anda seharusnya tidak berpengaruh dalam mengurangi penggunaan memori fisik aplikasi Anda.
sumber