.NET代码编译还是复杂?

rkr*_*ter 7 c# clr jit managed-code

Q1)为什么C#最初编译为IL然后在运行时JIT编译并在虚拟机(?)之上运行.或者JIT是否符合本机机器代码?

Q2)如果第二个为真(JIT符合本机机器代码),那么代码运行的.NET沙箱在哪里?

Q3)此外,为什么代码首先编译为IL.为什么不一直编译到本机代码?MS中有一个名为ngen的工具,但为什么可选?

Pao*_*olo 12

在进程运行时,IL将JIT(JIT =及时)编译为本机机器代码.

使用虚拟机层允许.NET跨平台以一致的方式运行(例如,无论您是在32位还是64位机器上运行,int总是32位,而C++不是这种情况).

JIT编译允许优化在运行时动态地为代码定制自己(例如对经常调用的代码应用更积极的优化,或者使用特定机器上可用的硬件指令,如SSE2),这是你无法做到的一个静态编译器.