Ben*_*Yeo 12 c# recursion tail-recursion c#-4.0
基于丰富的stackoverflow,我一直在研究是否对特定的c#代码进行了尾递归优化.一些问题似乎在讨论
从C#4.0(Visual Studio 2013/2015)开始,如果可以确保尾递归优化,如何确保尾递归优化呢?
Mik*_*ray 21
可以支持尾调用优化的不同级别.JIT真正负责发生的许多优化.C#编译器本身甚至不进行方法内联,这是JIT编译器的职责.C#编译器可以使用Tailcall IL操作码将一个调用指定为尾调用,但我相信没有版本的C#编译器可以做到这一点.允许JIT编译器在认为合适时进行尾调用优化.特别是,我相信只有64位JIT才能做到这一点.此博客文章概述了JIT64无法使用尾调用优化的一些场景.我确信这些标准可能会有所改变,因为他们正在重写代号为RyuJIT的JIT编译器.
如果您想要一个可以使用TCO的简短程序示例,请尝试以下方法:
class Program
{
static void Main(string[] args)
{
Test(1);
}
private static void Test(int i)
{
Console.WriteLine(i);
Test(i + 1);
}
}
Run Code Online (Sandbox Code Playgroud)
将项目设置为构建Release/x64(或不喜欢32位的AnyCPU)并在没有附加调试器的情况下启动.该计划将永远运行.如果我不做所有这些事情,那么我会在20947左右得到一个stackoverflow异常.
| 归档时间: |
|
| 查看次数: |
4037 次 |
| 最近记录: |