如何更改.NET程序的堆栈大小?

Fra*_*ank 30 .net stack-overflow stack resize

我有一个程序,它执行递归调用20亿次,堆栈溢出.我做了更改,然后它仍然需要40K递归调用.所以我需要几个MB堆栈内存.我听说堆栈大小默认为1MB.我尝试在线搜索.有人说在视觉工作室里去了属性 - >链接器.........但我找不到它.

有谁知道如何增加它?另外我想知道我是否可以在我的C#程序中设置它?

PS我使用的是32位winXP和64位win7.

And*_*lly 41

从.NET 2.0和Win XP开始设置堆栈大小的最简单方法是使用您想要的堆栈大小生成一个新线程: -

using System.Threading;

Thread T = new Thread(threadDelegate, stackSizeInBytes);
T.Start();
Run Code Online (Sandbox Code Playgroud)

要更改整个程序的堆栈大小,您必须使用editbin: -

EDITBIN.EXE /STACK:<stacksize> file.exe
Run Code Online (Sandbox Code Playgroud)

  • 对于那些使用editbin路由的人,您需要在Visual Studio安装程序中下载Visual C++工具集.你也可以把它作为`EDITBIN.EXE/STACK:<stacksize> $(TargetName)的后期构建步骤. (4认同)

Ree*_*sey 18

没有编译器选项可以做到这一点.您可以使用editbin/stack在事后编辑它,或者为您的算法创建一个单独的线程,并在Thread构造函数中指定更大的堆栈大小.

话虽这么说,你可能想要展平你的递归函数......如果你现在有堆栈溢出,很难知道从长远来看任何堆栈大小都是合适的.这只是一个创可贴解决方案.


Joh*_*ker 9

您最有可能尝试使用循环而不是递归.

  • +1,20亿递归调用有点过分. (8认同)