可以理解的是,有很多关于堆栈分配的相关问题

栈和堆是什么以及在哪里?

为什么堆栈大小有限制?

堆栈和堆内存的大小

但是在各种 *nix 机器上我可以发出 bash 命令

ulimit -s unlimited

或 csh 命令

set stacksize unlimited

这如何改变程序的执行方式?

如果有更多相关的系统细节,我主要关心在 x86_64 硬件上运行的 Linux 上使用 GCC 编译的程序。

答案

当您调用函数时,会在堆栈上分配一个新的"命名空间"。

为了限制程序使用大量堆栈空间,通常通过以下方式进行限制ulimit -sulimit -s unlimited,我们的程序将能够不断地消耗 RAM 来支持不断增长的堆栈,直到最终系统完全耗尽内存。

int eat_stack_space(void) { return eat_stack_space(); }
// If we compile this with no optimization and run it, our computer could crash.

通常,使用大量堆栈空间是偶然的,或者是非常深的递归的症状,可能不应该过多依赖堆栈。

对性能的影响很小,但确实存在。time命令,我发现消除堆栈限制将性能提高了几分之一秒(至少在 64 位 Ubuntu 上)。

来自: stackoverflow.com