如何改变一个.NET程序的堆栈大小?
我有一个程序,执行recursion调用20亿次和堆栈溢出。 我做了改变,然后它仍然需要40Krecursion调用。 所以我需要几个MB堆栈内存。 我听说堆栈大小默认为1MB。 我尝试在网上search。 有人说去视觉工作室去属性 – >连接器………但我找不到它。
有谁知道如何增加它? 另外我想知道如果我可以在我的C#程序中的某个地方设置它?
PS我使用的是32位的winXP和64位的win7。
从.NET 2.0和Win XP开始设置堆栈大小的最简单的方法是用你想要的堆栈大小产生一个新的线程:
using System.Threading; Thread T = new Thread(threadDelegate, stackSizeInBytes); T.Start();
要更改整个程序的堆栈大小,您必须使用editbin: –
EDITBIN.EXE /STACK:<stacksize> file.exe
没有编译器选项来执行它。 您可以使用editbin / stack编辑它 ,或者为您的algorithm创build一个单独的线程,并在Thread构造函数中指定一个更大的堆栈大小。
这就是说,你可能想扁平你的recursion函数…如果你现在有堆栈溢出,很难知道任何堆栈大小将是适当的长期。 这只是一个创可贴的解决scheme。
很可能你应该尝试使用循环而不是recursion。
我知道在VS中,你可以设置一个任意的堆栈大小(编辑:对于C ++程序)。 但是,我build议你使用尾部调用(即返回MyFunc(args);),它会自动回收堆栈空间。 然后,你会使用一些堆分配对象来保持状态。