重复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;
}
有人可以帮忙吗?
答案 0 :(得分:4)
这是一个链接器问题。您需要告诉链接器增加分配给堆栈的内存量。对于不同的语言和编译器,这是不同的。它可以是命令行参数,也可以是配置文件,甚至可以在源代码中指定。
答案 1 :(得分:2)
如果您使用的是Linux(也许是Mac?),您可以使用ulimit命令。
但您可能希望研究优化算法或查看尾递归。
答案 2 :(得分:0)
任何递归算法都可以使用列表重写为非递归算法。这样你就可以将问题从堆栈大小转移到堆大小,堆通常比线程堆栈大很多。还有堆栈大小的链接器标志,取决于您的编译器/链接器和平台
答案 3 :(得分:0)
或者您可以将递归重写为交互。
答案 4 :(得分:0)
除了你的主要问题,你可以使用Valgrind及其工具Massif来分析你的堆栈消耗内存(默认情况下是Massif配置文件堆,但如果打开了一个选项,也可以配置堆栈)。
答案 5 :(得分:0)
如果使用_beginthreadex,则可以指定堆栈大小。我相信默认值是1MB。您可以分离一个新线程来完成您的工作,并指定您想要的任何堆栈大小。