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

使用setrlimit增加Linux中的堆栈大小

使用setrlimit增加Linux中的堆栈大小

素胚勾勒不出你 2019-12-15 16:08:47
在阅读有关如何在ggn编译的c ++应用程序中增加堆栈大小的信息时,我了解到可以在程序开始时使用setrlimit完成此操作。但是,我找不到任何成功的示例来说明如何使用它,以及在程序的哪一部分应用它以获得c ++程序的64M堆栈大小,有人可以帮助我吗?
查看完整描述

3 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

通常,您可以main()在调用任何其他函数之前,例如在的开始处及早设置堆栈大小。通常,逻辑为:


调用getrlimit以获取当前堆栈大小

如果当前大小<所需的堆栈大小,则

调用setrlimit以将堆栈大小增加到所需大小

在C语言中,可能会这样编码:


#include <sys/resource.h>

#include <stdio.h>


int main (int argc, char **argv)

{

    const rlim_t kStackSize = 64L * 1024L * 1024L;   // min stack size = 64 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;

}



查看完整回答
反对 回复 2019-12-16
?
12345678_0001

TA贡献1802条经验 获得超5个赞

要超出setrlimit中的硬限制(在OSX上默认只有64MB),请使用具有选择的堆栈大小的pthreads创建一个新线程。这是一个C代码段:


    // Call function f with a 256MB stack.

    static int bigstack(void *(*f)(void *), void* userdata) {


      pthread_t thread;

      pthread_attr_t attr;


      // allocate a 256MB region for the stack.

      size_t stacksize = 256*1024*1024;

      pthread_attr_init(&attr);

      pthread_attr_setstacksize(&attr, stacksize);


      int rc = pthread_create(&thread, &attr, f, userdata);

      if (rc){

        printf("ERROR: return code from pthread_create() is %d\n", rc);

        return 0;

      }

      pthread_join(thread, NULL);

      return 1;


    }



查看完整回答
反对 回复 2019-12-16
  • 3 回答
  • 0 关注
  • 461 浏览
慕课专栏
更多

添加回答

举报

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