我有一个程序可以进行20亿次递归调用并且堆栈溢出。我做了更改,然后它仍然需要40K递归调用。所以我需要几个MB堆栈内存。我听说堆栈大小默认为1MB。我尝试在线搜索。有人说在视觉工作室里去了属性 - >链接器.........但是我找不到它。
有人知道如何增加它吗?另外我想知道我是否可以在我的C#程序中设置它?
P.S。我使用的是32位winXP和64位win7。
答案 0 :(得分:38)
从.NET 2.0和Win XP开始设置堆栈大小的最简单方法是使用您想要的堆栈大小生成一个新线程: -
using System.Threading;
Thread T = new Thread(threadDelegate, stackSizeInBytes);
T.Start();
要更改整个程序的堆栈大小,必须使用editbin: -
EDITBIN.EXE /STACK:<stacksize> file.exe
答案 1 :(得分:17)
没有编译器选项可以执行此操作。您可以edit it after the fact using editbin /stack或为算法创建单独的线程,并在Thread constructor中指定更大的堆栈大小。
话虽这么说,你可能想要展平你的递归函数......如果你现在有堆栈溢出,很难知道从长远来看任何堆栈大小都是合适的。这只是一个创可贴解决方案。
答案 2 :(得分:10)
最有可能你应该尝试使用循环而不是递归。
答案 3 :(得分:-1)
我知道在VS中你可以设置一个任意的堆栈大小(编辑:对于C ++程序)。但是,我建议您使用尾调用(即返回MyFunc(args);),它会自动回收堆栈空间。然后,您将使用一些堆分配的对象来保持状态。