gpt4 book ai didi

c# - C# 编译器的优化程度如何?

转载 作者:太空宇宙 更新时间:2023-11-03 17:49:37 31 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





MS C# compiler and non-optimized code

(3 个回答)


5年前关闭。




这段代码的 IL 代码(使用 https://dotnetfiddle.net 生成):

public class Program
{
public static void Main()
{
int i = 10;
if (i < 4)
Console.WriteLine("Hello World");
}
}

包含 ldstr “Hello World”。

编译器不应该知道 Console.WriteLine 永远不会被执行吗?

这个的IL代码:
public class Program
{
public static void Main()
{
if (10 < 4)
Console.WriteLine("Hello World");
}
}

不包含 ldstr 命令。

现在我很困惑.. .NET 编译器真的那么愚蠢吗?
两个示例的 C#/IL 代码完全相同:什么都没有。但是第一个例子的 IL 代码比另一个大。一个好的编译器不应该只调用构造函数而什么都不做吗..?

编辑:

是的,我已经阅读了 this但我不是在谈论额外生成的本地人。

如果 i将是属性或公共(public)变量,可以从另一个线程修改它。但是 i只存在于 Main()...

最佳答案

这是您的代码段的 x64 反汇编:

00007FF7C6083E0E  add         byte ptr [rax],al  
--- C:\Dev\Temp\Test\ConsoleApp\ConsoleApp\Program.cs --------------------------
int i = 10;
00007FF7C6083E10 ret
--- No source file -------------------------------------------------------------

这意味着,JIT 执行了死代码消除( ret = return, Main 函数立即退出)。

编译器只执行一些基本的优化,但大部分都留给了 JIT,以针对它运行的平台进行优化。

虽然我同意编译器在这种情况下当然可以执行这种优化,因为它是平台无关的。

关于c# - C# 编译器的优化程度如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36010581/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com