我读了一本书(CLR via c#),书中作者谈到了 IL 和托管模块,托管模块在本机 cpu 代码中编译,然后在书中执行,作者说托管模块比非托管模块更快。我的问题是为什么托管模块模块比非托管模块更快,但对于托管模块,首先编译为 IL,然后在本机 cpu 中编译。
CLR via C#, Page No 14
)
当 JIT 编译器将 IL 代码编译为本机机器代码时 运行时,编译器比执行环境更了解 非托管编译器会知道。
托管代码可以在某些方面优于非托管代码
JIT 编译器可以确定某个测试何时在其运行的计算机上总是失败。考虑这个例子
if (num_of_cpu > 1)
{
}
如果机器只有一个 CPU,此代码会导致 JIT 不会生成任何 CPU 指令。