![]() |
1
5
当您将C#编译成.NET程序集时,代码是用MSIL(Microsoft中间语言)编写的。这使得代码可以移植。NET运行时将对其进行JIT编译以供执行。 MSIL是一种堆栈语言。它不知道目标硬件的细节(比如CPU有多少个寄存器)。只有一种方法可以写这个加法:
:
当然,之后会有一些优化。JIT编译器将把它转换成实际的机器代码。 SharpLab :
我们收到了
好吧,那是SharpLab,那是JIT。理论上,不同的编译器可以在不同的平台上将代码转换成不同的内容。 您可以将.NET代码AOT编译为本机映像,这在优化时会更具攻击性。尽管如此,我不认为你将如何改进一个简单的加法。 哦,我知道,它可能会看到您不使用这个值并删除它,或者可能会看到您总是添加相同的值并用常量替换它。 值得注意的是,现代的.NETJIT能够在执行过程中继续优化代码(它将很快生成优化效果不佳的本机代码版本,稍后-一旦准备就绪-将其替换为更好的版本)。这个决定来自这样一个事实:在JIT运行时,性能取决于创建本机代码所需的时间和本机代码运行所需的时间。 C++
说明书
:x86-64 gcc 9.3,带
添加编译器选项
|
![]() |
2
3
要回答这些问题,您可以使用SharpLab。 作为 you can see 在这两种情况下,生成的IL和JITted代码都是相同的。 |
![]() |
3
2
它是严格等价的。形式
|
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 3 年前 |
|
Dansih · .Net核心自定义身份验证方案 3 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 3 年前 |