为什么Linux机器上的堆栈大小几乎总是132KiB?

以下命令计算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 

在几乎所有的情况下,堆栈的大小是132KiB。 为什么这个号码如此特别? 这是堆栈的最小可能大小吗?

内核在setup_arg_pages()中将新的进程堆栈设置为128kB:

 stack_expand = 131072UL; /* randomly 32*4k (or 2*64k) pages */ 

当你添加一个4kB的警卫页面时,132kB。 如果这个过程从来没有使用过这么多的堆栈,它将不会被扩展超过这个大小。