调用函数时,将在堆栈上分配一个新的“命名空间”。这就是函数可以具有局部变量的方式。作为函数调用函数,而函数又依次调用函数,我们不断在堆栈上分配越来越多的空间以维护命名空间的这种深层次结构。
为了限制使用大量堆栈空间的程序,通常通过设置一个限制
ulimit -s。如果我们通过删除该限制
ulimit -sunlimited,我们的程序将能够为不断增长的堆栈增加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上)。



