在用g++编译C++程序的过程中,我使用了
LD_FLAGS= -Wl,-stack_size,0x100000000但在SUSE Linux中,我经常收到这样的错误:
x86_64-suse-linux/bin/ld: unrecognized option '--stack'也很相似。
我知道这是可以使用的
ulimit -s unlimited但这并不好,因为并不是每个用户都能做到这一点。
如何在Linux下用GCC增加单个应用的栈大小?
发布于 2010-02-18 05:55:09
您可以使用setrlimit以编程方式设置堆栈大小,例如
#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()本身中声明大的局部变量,因为在getrlimit/setrlimit代码有机会更改堆栈大小之前,一旦输入main(),就很可能会出现堆栈溢出。因此,在成功增加堆栈大小之后,应仅在随后从main()调用的函数中定义任何较大的局部变量。
发布于 2010-02-17 03:12:11
使用--stack代替stack_size,如下所示:
gcc -Wl,--stack,4194304 -o program program.c这个例子应该会给你4MB的堆栈空间。适用于MinGW的GCC,但正如手册中所说,“此选项特定于链接器的Windows目标端口”(即,仅适用于输出i386二进制文件)。似乎没有ELF二进制文件的选项。
发布于 2017-03-21 18:29:21
考虑使用-fsplit-stack选项https://gcc.gnu.org/wiki/SplitStacks
https://stackoverflow.com/questions/2275550
复制相似问题