【问题标题】:Increase stack size in OS X Lion在 OS X Lion 中增加堆栈大小
【发布时间】:2012-04-30 03:47:39
【问题描述】:

我需要为需要大量堆栈的 C++ 程序执行此操作。我使用 g++(包含在 OS X Lion 中)来编译它。我怎样才能为我的程序增加它?

【问题讨论】:

标签: g++ stack osx-lion


【解决方案1】:

来自http://developer.apple.com/library/mac/#qa/qa1419/_index.html

使用 gcc,通过 -Wl 将链接标志传递给 ld:

gcc -Wl,-stack_size -Wl,1000000 foo.c

【讨论】:

    【解决方案2】:

    您可以使用getrlimit/setrlimit - 这适用于 Linux、Mac OS X 和其他类似 POSIX 的操作系统,例如

    #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;
    }
    

    【讨论】:

    • 在 OS X Lion 中,我不能设置超过 32 * 1024 * 1024,但在 Linux 中我甚至可以设置 256 * 1024 * 1024 ,这正是我所需要的。所以我的问题是如何使用该代码超越 OS X 中的限制
    • 即使 32 MB 也是一个巨大堆栈 - 如果您真的需要 256 MB 堆栈,那么我认为可能是时候重新评估您的程序设计了。
    • 我同意你说的。问题是该程序不是我的,我必须使用它,现在无法修改它
    • 换句话说“吃别人的山茱萸”:-P
    • 对于这类问题有一些快速简单的修复方法,例如如果具有大局部变量的例程仅在单个线程中使用,那么您可以制作最大的局部变量static
    猜你喜欢
    • 2011-07-05
    • 1970-01-01
    • 2013-09-25
    • 2015-11-22
    • 2010-11-24
    • 1970-01-01
    • 2017-03-02
    • 2015-07-01
    • 1970-01-01
    相关资源
    最近更新 更多