我在书中写了一本书(CLR通过c#)讲述了IL和托管模块,托管模块在本机cpu代码中进行编译,然后在书中执行写作说托管模块比非托管模块更快。我的问题是为什么Managed模块比Unmanaged模块更快但是在Managed模块中首先编译为IL然后在本机cpu中编译。
答案 0 :(得分:1)
(我在下面写的不是我的,它是从一本书中复制粘贴的:CLR via C#, Page No 14
)
当JIT编译器将IL代码编译为本机代码时 运行时,编译器比执行环境更了解 非托管编译器会知道。
托管代码可以胜过非托管代码的一些方法
JIT编译器可以确定某个测试何时始终在运行它的计算机上失败。考虑一下这个例子
if (num_of_cpu > 1)
{
}
如果机器只有一个CPU,则此代码会导致JIT不生成任何CPU指令。