为什么C#编译器没有内联MSIL代码?

时间:2018-01-07 01:04:19

标签: c# optimization inline-assembly jit cil

我的问题是为什么C#编译器不允许内联C#MSIL函数。我知道JIT会在某些情况下内联实际的X86程序集,但我问的是实际的MSIL“程序集”代码。

为什么C#编译器不提供这些类型的优化?

是因为收益微不足道?或者它从未实施过?

1 个答案:

答案 0 :(得分:4)

a similar question for the Java compiler's optimizations when translating to JVM bytecode的回复似乎是适用的。从高级语言(C#或Java)到中间语言(CIL / MSIL或JVM字节码)的编译器可能不希望优化其发出的代码,因为:

Eric Lippert's blog post on the C# compiler's /optimize flag支持编译器更喜欢进行更少优化的概念,将其留给.NET JIT:

  

这些是非常简单的优化;没有IL的内联,没有循环展开,没有任何过程间分析。我们让抖动团队担心在代码实际吐入机器代码时优化代码;那是你获得真正胜利的地方。