我有一个使用尾递归(用F#编写的)的.NET 4.0应用程序。在.NET VM上运行得很好,但在Mono-3.0.1上会导致栈溢出。
我尝试使用mono --optimize=tailc
运行,但似乎没有改变任何东西。
有没有办法强制Mono消除尾调用? 有没有办法在Mono中增加最大堆栈大小?
我有一个使用尾递归(用F#编写的)的.NET 4.0应用程序。在.NET VM上运行得很好,但在Mono-3.0.1上会导致栈溢出。
我尝试使用mono --optimize=tailc
运行,但似乎没有改变任何东西。
有没有办法强制Mono消除尾调用? 有没有办法在Mono中增加最大堆栈大小?
有一个非常相似的问题,有很多有用的答案: Mono下的堆栈大小
正如Robert Harvey在评论中指出的那样,对于F#,Mono的尾调用支持存在错误/不完整 (bug 476785: F#的尾调用支持)。解决此问题的方法在 Mono运行时正在进行的项目列表 中。
堆栈大小可以通过使用System.Threading.Thread
构造函数或PE头文件来增加。但是,System.Threading.Thread
的方式 在Mono中不起作用。如果要更改PE,则可能需要使用MS Visual Studio,因为可能没有其他方法来使用其{{link3:editbin.exe /stack
}}。