Linux
為什麼在現代 Linux 上,預設堆棧大小如此之大 - 8MB(在某些發行版上甚至是 10)
例如,在 OSX 上,它甚至低於 512k。
*考慮到應用程序不使用遞歸併且不分配大量堆棧變數,*是否有任何推薦的大小?
我知道這個問題太寬泛了,而且很大程度上取決於使用情況,但仍然想問,因為我想知道這個巨大數字背後是否有一些隱藏/內部/系統原因。
我想知道,因為我打算在我的應用程序中將堆棧大小更改為 512 KiB - 這聽起來仍然是一個巨大的數字,但它比 8MiB 小得多 - 並且會導致程序的虛擬記憶體顯著減少,因為我有很多執行緒(I/O)。
我也知道這並沒有真正的傷害,在這裡很好地解釋了:pthreads 的預設堆棧大小
正如其他人所說,並且正如您在問題中提供的連結中提到的那樣,擁有 8MiB 堆棧不會有任何傷害(除了消耗地址空間 - 在 64 位系統上無關緊要)。
Linux 使用 8MiB 堆棧已經很長時間了;1995 年 7 月在核心1.3.7 版本中引入了更改。當時它被介紹為引入限制,以前沒有:
將堆棧限制為一些合理的預設值:如果需要,root 可以隨時增加此限制.. 8MB 似乎是合理的。
在 Linux 上,堆棧限制也會影響程序參數的大小和環境,限制為堆棧限制的四分之一;核心為參數和環境強制執行至少 32 頁。
對於執行緒,如果堆棧
RLIMIT_STACK
限制pthread_create
(