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

Beg*_*ner 3 c linux

以下命令为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。为什么这个数字如此特别?这是最小的堆栈大小吗?

caf*_*caf 5

内核在以下位置将新进程堆栈设置为128kB setup_arg_pages()

stack_expand = 131072UL; /* randomly 32*4k (or 2*64k) pages */
Run Code Online (Sandbox Code Playgroud)

当您添加单个4kB保护页时,即为132kB。如果该进程从未使用过多的堆栈,则不会超出该大小。