当前位置: 首页 > 面试题库 >

“ ulimit -s unlimited”有什么作用?

伊羽
2023-03-14
问题内容

但是在各种* 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上)。



 类似资料:
  • 问题内容: 如果一个网页以…开头有什么区别 并且如果页面以 如果没有区别,我想我可以忽略元标头,因为我只想在所有IE版本中以最标准的方式呈现它。 问题答案: 这个答案是几年前发布的,现在的问题确实应该是 您_是否 _应该考虑 在您的网站上 使用 标记? 微软对其浏览器所做的更改(更多有关以下内容)。 根据您支持的Microsoft浏览器,您可能不需要继续使用该标记。如果您需要支持IE9或IE8,那

  • Java中Object有一个方法: public native int hashcode(); (1)hashcode()方法的作用 hashcode()方法主要配合基于散列的集合一起使用,比如HashSet、HashMap、HashTable。 当集合需要添加新的对象时,先调用这个对象的hashcode()方法,得到对应的hashcode值,实际上hashmap中会有一个table保存已经存进去

  • 问题内容: 我是Java的新手,刚刚遇到了在方法中使用“ Throws”关键字的教程。我对此进行了一些研究,但仍然不太了解。 从我到目前为止所看到的,它告诉编译器在该特定方法中可能抛出某些异常。为什么我们需要告诉编译器呢?我已经在我的方法中仅使用try- catch语句制作了许多程序,并且效果很好-当然,这些try-catch语句可以管理异常,对吗? 问题答案: 您可以使用和如您所说 在 方法 内

  • 问题内容: 我在linux ubuntu 17.10上运行代码 此代码返回“无限” 但是每当我从终端运行命令时,我都会得到1024。 为什么这些数字不同? 问题答案: 如果从命令行运行相同的命令,则会得到相同的结果: 这是因为仅查看紧随其后的参数。的不是此参数的一部分,并且被代替而不是分配作为位置参数()。 要运行,需要成为该参数的一部分: 换句话说,您应该使用:

  • 问题内容: 我在一些Spring webflux代码中遇到了Mono.defer() 我在文档中查找了该方法,但不理解其中的解释: “创建一个Mono提供程序,该提供程序将提供目标Mono供每个下游的订阅者订阅” 请给我一个解释和一个例子。我可能会参考一堆Reactor示例代码(它们的单元测试?)的地方。 谢谢 问题答案: 这有点过分简化,但是从概念上讲,Reactor的来源要么是懒惰的,要么是渴

  • 问题内容: 我正在关注Stephen Grinder的教程,在那里他开始使用Promisify。 为此,他给出了非常模糊的解释,说redis需要回调函数,并且他发现非常不整洁+ redis不支持NodeJS中的promises。 然后他做了这样的事情 出于某种原因,我发现该解释含糊不清,有人可以以最人性化的方式进行解释吗?像他的意思和我们在做什么? 问题答案: 当您要将回调函数转换为基于promi