getrlimit(2)在手册页中有以下定义:
RLIMIT_AS 进程的虚拟内存(地址空间)的最大大小(以字节为单位)。此限制会影响对 brk(2)、mmap(2) 和 mremap(2) 的调用,超出此限制时会失败并显示错误 ENOMEM。此外,自动堆栈扩展也会失败(如果没有通过 sigaltstack(2) 提供可用的替代堆栈,则会生成一个 SIGSEGV 来终止进程)。由于该值为 long,因此在具有 32 位 long 的机器上,此限制最多为 2 GiB,或者此资源是无限的。
这里的“自动堆栈扩展”是什么意思?Linux/UNIX 环境中的堆栈是否根据需要增长?如果是,确切的机制是什么?