我有一个程序需要递归调用20亿次,但程序出现了栈溢出的错误。我进行了修改,现在只需要40K个递归调用,所以我可能需要几兆字节的堆栈内存。我听说堆栈大小默认为1MB。我在网上搜索了一下,有人说可以通过属性->链接器……在Visual Studio中设置,但我找不到这个选项。
有人知道如何增加堆栈大小吗?此外,我想知道是否可以在我的C#程序中设置。
附言:我使用的是32位winXP和64位win7。
我有一个程序需要递归调用20亿次,但程序出现了栈溢出的错误。我进行了修改,现在只需要40K个递归调用,所以我可能需要几兆字节的堆栈内存。我听说堆栈大小默认为1MB。我在网上搜索了一下,有人说可以通过属性->链接器……在Visual Studio中设置,但我找不到这个选项。
有人知道如何增加堆栈大小吗?此外,我想知道是否可以在我的C#程序中设置。
附言:我使用的是32位winXP和64位win7。
using System.Threading;
Thread T = new Thread(threadDelegate, stackSizeInBytes);
T.Start();
要更改整个程序的堆栈大小,您需要使用editbin命令:
EDITBIN.EXE /STACK:<stacksize> file.exe
在处理问题时,很可能应该尝试使用循环而不是递归。
我知道在VS中你可以设置任意的堆栈大小(编辑:对于C++程序)。然而,我建议你使用尾调用(即,返回MyFunc(args);),它会自动回收堆栈空间。然后,你可以使用一些堆分配的对象来保存状态。
$(TargetPath)
而不是$(TargetName)
。 - Jamie Thomas