次のコマンドは、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++プログラムでは、呼び出しスタックがあまり深くなく、再帰が広く使われておらず、フリー・ストア上に自明でないオブジェクトが割り当てられているからです。 –
実行中のプロセスの数がそれほど多くなくても、コマンドラインの最大サイズを超えていれば、 'cat/proc/*/maps | grep ... ' – caf
関連、[Qualys Security Advisory - The Stack Clash](http://www.openwall.com/lists/oss-security/2017/06/19/1)のOSS-Securityメーリングリストを参照してください。それはいくつかのきちんとしたトリックを示し、ガードページをかなり害しています。彼らがそれを使っていくつのOSを驚かせたかは驚くべきことです。 – jww