我有一个大量使用尾递归(用 F# 编程)的 .NET 4.0 应用程序。它在 .NET VM 上运行良好,但在 Mono-3.0.1 上用完堆栈。
我试过跑步,mono --optimize=tailc
但这似乎并没有改变任何东西。
有没有办法强制单声道消除尾音?有没有办法增加单声道的最大堆栈大小?
最近有一个非常相似的问题,提供了有用的答案:Stack size under Mono
正如 Robert Harvey 在评论中已经指出的那样,Mono 已经破坏/不完整的 F# 尾调用支持(错误 476785:F# 中的尾调用支持)。此问题的修复在 Mono 的运行时正在进行的项目列表中。
堆栈大小可以使用System.Threading.Thread
构造函数或在 PE 标头中增加。但是,这种System.Threading.Thread
方式在 Mono 中不起作用。要更改 PE,您可能需要 MS Visual Studio,因为它可能没有其他选择editbin.exe /stack
。