- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
堆栈分配有很多相关的问题是可以理解的
What and where are the stack and heap?
Why is there a limit on the stack size?
但是在各种 *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/
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我有一个问题,我需要从 java/groovy 程序中找出 linux 进程的硬和软打开文件限制。当我从终端执行 ulimit 时,它会为硬打开文件限制和软打开文件限制提供单独的值。 $ ulimit
这是输出。 core file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling
操作系统是Centos 7 , 我正在使用 Test Kitchen 1.13.2和 centos-7.2默认 Vagrant 框。 我需要 nproc 超过一个用户的特定限制,为此我修改了 /etc
全部 我想将核心文件大小永久设置为无限制。 阅读它,建议是修改/etc/security/limits.conf。 我已经使用以下行这样做了: 软核10000 根硬核 10000 更改后我重新启动并发
我已阅读 here docker 容器从主机继承 ulimit 属性。我的容器似乎没有发生这种情况。特别是,我需要从主机继承 max locked memory 属性。有谁知道如何修复它? ubunt
我试图在 this question 上帮助 OP . 我发现即使堆栈设置为 2000 KB,像下面这样的代码也会随机导致段错误。 int main () { int a[510000];
我正在研究堆栈内存,我正在尝试增加软限制。我发现这样做的命令是: 显示堆栈大小(以 KB 为单位): ulimit -s 我可以使用以下方法改变它: ulimit -s value 操作系统还设置了硬
root用户运行以下 ulimit -a | grep open 并得到结果 open files (-n) 65536 用户运行相同的命令并得到结果 open files (-n) 65000 如何
我想永久设置ulimit -m(最大内存大小)和ulimit -v(虚拟内存)。服务器重新启动后,它们不应更改。我尝试编辑/etc/security/limits.conf,但是服务器重新启动后它们仍
我在虚拟机上运行 Linux 操作系统 (Ubuntu)。当我运行命令时 ulimit -Sv 50 它没有在该 bash session 中设置虚拟内存大小的软限制。我收到的错误是: fatal e
我不知道如何以正确的方式从我的计算机中删除所有限制,所以我做了一个小命令: sudo su ulimit -a 9999999 ulimit -b 9999999 ulimit -c 9999999
试图限制核心转储文件的大小。我想限制在4MB左右,所以我设置为1000( block ,每个 block 4KB)。但它不限制核心转储文件的大小。有任何想法吗? $ ulimit -c 1000 $
我有一个 hadoop 集群,我们假设它的性能非常“糟糕”。节点非常强大.. 24 个内核,60+G RAM ..等。我们想知道是否有一些基本的 linux/hadoop 默认配置阻止 hadoop
通过反复试验,我发现我可以给 ulimit -Hn 而不会出错的最大数字是 1048576。这个数字从何而来?我的 sys.fs.file-max 是 20000500(2000 万)。 最佳答案 实
有人知道在 Linux 中为另一个用户查找“ulimit -a”值的方法吗?我希望用户 A 能够检查用户 B 的 ulimit 值。假设用户 A 和用户 B 是非根用户。 提前致谢 最佳答案 我建议:
在我正在处理的项目中,xdebug 需要大约 1 小时才能生成覆盖率。我已经尝试过 phpdbg,但在我的测试套件中遇到以下错误: stream_select(): You MUST recompil
这是尝试启动 apache2 的日志: * Starting web server apache2
如 normaluser : $ ulimit -n 4096 -bash: ulimit: open files: cannot modify limit: Operation not permit
我正在使用 tomcat 7 和 java 1.7 的 debian 服务器上工作。这是一个接收多个 TCP 连接的应用程序,每个 TCP 连接都是一个由 java 进程打开的文件。 看着 /proc
我是一名优秀的程序员,十分优秀!