gpt4 book ai didi

linux - "ulimit -s unlimited"有什么作用?

转载 作者:IT老高 更新时间:2023-10-28 12:37:14 30 4
gpt4 key购买 nike

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

What and where are the stack and heap?

Why is there a limit on the stack size?

Size of stack and heap memory

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

ulimit -s unlimited

或 csh 命令

set stacksize unlimited

这如何改变程序的执行方式?对程序或系统性能是否有任何影响(例如,为什么这不是默认设置)?

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

最佳答案

当您调用函数时,会在堆栈上分配一个新的“命名空间”。这就是函数可以具有局部变量的方式。随着函数调用函数,函数又调用函数,我们不断在堆栈上分配越来越多的空间来维护这种深层的命名空间层次结构。

为了限制程序使用大量堆栈空间,通常通过 ulimit -s 设置限制。如果我们通过 ulimit -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 上)。

关于linux - "ulimit -s unlimited"有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14471564/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com