为了账号安全,请及时绑定邮箱和手机立即绑定

在用GNU编译器编译时更改Linux中C+应用程序的堆栈大小

在用GNU编译器编译时更改Linux中C+应用程序的堆栈大小

在用GNU编译器编译时更改Linux中C+应用程序的堆栈大小在OSX中,在C+程序编译过程中使用g++我用LD_FLAGS= -Wl,-stack_size,0x100000000但是在SUSE Linux中,我经常会遇到这样的错误:x86_64-suse-linux/bin/ld: unrecognized option '--stack'和类似的。我知道可以用ulimit -s unlimited但是这并不是很好,因为单个用户并不总是能做到这一点。如何在Linux中为单个应用程序增加堆栈大小?
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

可以编程方式将堆栈大小设置为七限,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(),在成功地增加堆栈大小之后。


查看完整回答
反对 回复 2019-06-26
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

而不是stack_size,使用--stack就像这样:

gcc -Wl,--stack,4194304 -o program program.c

这个例子应该给你4MB的堆栈空间。工作在MinGW的GCC,但如手册所述,“此选项是特定于i 386 PE目标端口的链接器”(即只用于输出Windows二进制文件)。看来ELF二进制文件没有选择。


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 1884 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信