【问题标题】:How can I increase the stack memory?如何增加堆栈内存?
【发布时间】:2010-10-27 20:42:14
【问题描述】:

How to allow more memory and avoid stack overflow on lots of recursion? 的副本

我正在编写一个分支定界算法,它通过递归函数具有至少 10000 个级别,但由于堆栈溢出错误,它不起作用。这是我的 C++ 程序的一个简单实例:

void f(int k)
{
   if(k==10000) return;
   f(k+1);
} 

void main()
{
   f(1);
   return;
}

有人可以帮忙吗?

【问题讨论】:

标签: c++ recursion stack overflow


【解决方案1】:

如果您使用 _beginthreadex,您可以指定堆栈大小。我相信默认值是 1MB。您可以分拆一个新线程来完成您的工作并指定您想要的任何堆栈大小。

【讨论】:

    【解决方案2】:

    除了您的主要问题之外,您还可以使用 Valgrind 及其工具 Massif 来分析您的堆栈消耗内存(Massif 默认情况下会分析堆,但如果打开了一个选项,也可以分析堆栈)。

    【讨论】:

      【解决方案3】:

      如果您使用的是 Linux(也许 Mac 也是?),您可以使用 ulimit 命令。

      但您可能想研究优化算法或研究尾递归。

      【讨论】:

        【解决方案4】:

        或者您可以将递归重写为交互。

        【讨论】:

          【解决方案5】:

          任何递归算法都可以使用列表重写为非递归算法。通过这种方式,您将问题从堆栈大小转移到堆大小,堆通常(远)大于线程堆栈。还有堆栈大小链接器标志,取决于您的编译器/链接器和平台

          【讨论】:

            【解决方案6】:

            这是一个链接器问题。您需要告诉链接器增加分配给堆栈的内存量。这对于不同的语言和编译器是不同的。可以是命令行参数,也可以是配置文件,甚至可以在源码中指定。

            【讨论】:

              猜你喜欢
              • 2011-03-13
              • 2012-12-06
              • 2013-12-24
              • 2011-09-29
              • 1970-01-01
              • 2011-11-27
              • 2012-07-19
              • 1970-01-01
              相关资源
              最近更新 更多