以下命令計算Linux機器上每個正在運行的進程的堆棧大小。爲什麼Linux機器上的堆棧大小几乎總是132KiB?
# find /proc -maxdepth 1 -type d -regex '/proc/[0-9]*' -exec cat '{}'/maps \; | grep stack | cut -d' ' -f1 | gawk --non-decimal-data 'BEGIN{FS="-"} {printf "%d\n", (("0x" $2) - ("0x" $1))/1024}' | sort
在幾乎所有的情況下,堆棧的大小爲132KiB。爲什麼這個號碼如此特別?這是堆棧的最小可能大小嗎?
這可能是使用GCC編譯的C和C++程序的最低限度,這意味着大多數Linux程序。然而,很少有程序超過它的原因是,在編寫良好的C和C++程序中,調用堆棧不是很深,遞歸沒有被廣泛使用,並且在免費商店中分配了非平凡的對象。 – 2011-12-27 20:54:26
只要運行進程的數量不是很多以至於超過了最大命令行大小,就可以簡單地執行'cat/proc/*/maps | grep ...' – caf 2011-12-27 21:26:16
相關,請參閱OSS-Security郵件列表上的[Qualys Security Advisory - Stack Stack](http://www.openwall.com/lists/oss-security/2017/06/19/1)。它展示了一些巧妙的技巧,以及對守衛頁面的漂亮詛咒。它驚人地發現了多少操作系統。 – jww 2017-06-19 22:07:40