在 OSX 中 C++ 程序编译期间g++
I use
LD_FLAGS= -Wl,-stack_size,0x100000000
但在 SUSE Linux 中我经常遇到如下错误:
x86_64-suse-linux/bin/ld: unrecognized option '--stack'
和类似的。
我知道可以使用
ulimit -s unlimited
但这并不好,因为单个用户并不总是可以做到这一点。
如何使用 GCC 增加 Linux 中单个应用程序的堆栈大小?
您可以通过编程方式设置堆栈大小设置限制, e.g.
#include <sys/resource.h>
int main (int argc, char **argv)
{
const rlim_t kStackSize = 16 * 1024 * 1024; // min stack size = 16 MB
struct rlimit rl;
int result;
result = getrlimit(RLIMIT_STACK, &rl);
if (result == 0)
{
if (rl.rlim_cur < kStackSize)
{
rl.rlim_cur = kStackSize;
result = setrlimit(RLIMIT_STACK, &rl);
if (result != 0)
{
fprintf(stderr, "setrlimit returned result = %d\n", result);
}
}
}
// ...
return 0;
}
注意:即使使用此方法增加堆栈大小,您也不应该在中声明大的局部变量main()
本身,因为一旦您输入,您很可能会遇到堆栈溢出main()
, 之前getrlimit
/setrlimit
代码有机会更改堆栈大小。因此,任何大型局部变量都应该仅在随后调用的函数中定义main()
,在成功增加堆栈大小后。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)