首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Linux中使用setrlimit增加堆栈大小

在Linux中使用setrlimit增加堆栈大小
EN

Stack Overflow用户
提问于 2010-02-17 15:44:40
回答 2查看 73.8K关注 0票数 26

在阅读有关如何在编译时为使用gnu编译的c++应用程序增加堆栈大小的信息时,我了解到可以在程序开始时使用setrlimit来完成此操作。然而,我找不到任何成功的例子来说明如何使用它,以及在程序的哪个部分应用它,以便为c++程序获得64M的堆栈大小,有人能帮我吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2010-02-17 15:54:15

看看运行时执行的最大值是否限制了它:

代码语言:javascript
复制
[wally@zf conf]$  ulimit -all
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16114
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 16114
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

请注意,默认情况下,堆栈大小限制为10 MiB。因此,要将其增加到64 MiB:

代码语言:javascript
复制
[wally@zf conf]$ ulimit -s 64M
-bash: ulimit: 64M: invalid number
[wally@zf conf]$ ulimit -s 65536
[wally@zf conf]$ ulimit -all
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16114
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 65536
cpu time               (seconds, -t) unlimited
max user processes              (-u) 16114
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
票数 13
EN

Stack Overflow用户

发布于 2012-02-15 00:58:42

要超过setrlimit的硬限制(在OSX上,默认情况下它只有64MB ),可以使用pthread创建一个新线程,它的堆栈大小是您选择的。下面是一个C代码片段:

代码语言:javascript
复制
    // 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;

    }
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2279052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档