以下命令为Linux机器上每个正在运行的进程计算堆栈的大小。
# 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
Run Code Online (Sandbox Code Playgroud)
在几乎所有情况下,堆栈的大小均为132KiB。为什么这个数字如此特别?这是最小的堆栈大小吗?
内核在以下位置将新进程堆栈设置为128kB setup_arg_pages():
stack_expand = 131072UL; /* randomly 32*4k (or 2*64k) pages */
Run Code Online (Sandbox Code Playgroud)
当您添加单个4kB保护页时,即为132kB。如果该进程从未使用过多的堆栈,则不会超出该大小。