为什么.NET代码编译成MSIL?

时间:2009-12-18 05:06:39

标签: .net cil

首先.NET代码编译为MSIL,然后JIT将其转换为机器相关代码。任何人都可以告诉我因为2步编译而获得的所有好处。谢谢

4 个答案:

答案 0 :(得分:20)

有几个原因。首要的可能是使其跨平台。如果C#或其他.NET语言直接编译为本机代码,则必须为它们运行的​​每个平台重新编译它们。使用VM,所有代码都可以保存为中间格式,您只需要为每个平台编写VM实现。

此外,通过使用与语言无关的中间语言,您可以使用许多高级语言(C#,VB.NET,Python等),这些语言都引用了用其他语言编写的程序集。由于它们都编译成相同的东西,它们可以相互无缝地工作。

还有性能优势。 JIT编译器可以专门针对当时运行代码的机器进行积极的优化。我不知道.NET JIT编译器在这个意义上做了多少优化,但是可以获得非常大的理论上的好处。

答案 1 :(得分:6)

答案可以在MSDN

找到

答案 2 :(得分:1)

  • 可执行文件未绑定到平台。例如,XNA同时针对PPC(Xbox360)和x86处理器。有些程序将在Linux或OSX上的Mono上运行。

  • 它允许您更好地优化目标计算机或替换缺少的功能:

    • 例如,OSX> = 10.5在运行时使用OpenCL编译缺少的GPU指令。
    • 假设您正在使用没有浮点支持的CPU,那么您可以使用JIT模拟它,而无需重写代码。
    • 在未来的某个时刻,可以动态地将处理卸载到GPU或其他目标中(我怀疑功能语言更适合这种情况)。

答案 3 :(得分:1)

首先从高级语言转换到机器级,这就是.Net平台的设计方式。第一层用MSIL处理高级语言,第二层可以专注于hitch&将MSIL转换为机器级代码的平台故障。它主要支持语言互操作性,并且可能在不久的将来,当Mono等项目获得更多优势时,它还将提供跨平台支持。