使用 setrlimit 增加 Linux 中的堆栈大小
在编译时阅读有关如何增加使用 gnu 编译的 C++ 应用程序的堆栈大小的信息,我了解到可以在程序开头使用 setrlimit 来完成此操作。尽管如此,我找不到任何关于如何使用它以及在程序的哪一部分应用它以获得 C++ 程序的 64M 堆栈大小的成功示例,有人可以帮助我吗?
谢谢
reading information about how to increase stack size for a c++ application compiled with gnu, at compilation time, I understood that it can be done with setrlimit at the beginning of the program. Nevertheless I could not find any successful example on how to use it and in which part of the program apply it in order to get a 64M stack size for a c++ program, could anybody help me?
Thanlks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
通常,您会在调用任何其他函数之前尽早设置堆栈大小,例如,在
main()
开始时设置。通常的逻辑是:getrlimit
获取当前堆栈 尺寸setrlimit
将堆栈大小增加到所需大小在 C 中可能会编码如下:
Normally you would set the stack size early on, e,g, at the start of
main()
, before calling any other functions. Typically the logic would be:getrlimit
to get current stack sizesetrlimit
to increase stack size to required sizeIn C that might be coded something like this:
查看运行时执行最大值是否受到限制:
请注意,默认情况下,堆栈大小限制为 10 MiB。因此,要将其增加到 64 MiB:
See if the runtime execution maximum is limiting it:
Note that the stack size, by default, is limited to 10 MiB. So to increase it to 64 MiB:
要超越 setrlimit 中的硬限制(在 OSX 上默认情况下仅为 64MB),请使用 pthreads 创建一个新线程,并具有您选择的堆栈大小。这是一个 C 代码片段:
To get beyond the hard limit in setrlimit (on OSX its only 64MB by default), create a new thread using pthreads with a stack size of your choice. Here's a C snippet: