rol*_*lls 2 c# optimization jit cil inline-assembly
我的问题是为什么 C# 编译器不允许内联 C# MSIL 函数。我知道在某些情况下 JIT 会内联实际的 X86 程序集,但我询问的是实际的 MSIL“程序集”代码。
为什么 C# 编译器不提供这些类型的优化?
是不是因为收益很小甚至没有收益?或者它根本没有实施?
对翻译为 JVM 字节码时 Java 编译器优化的类似问题的回答似乎是适用的。从高级语言(C# 或 Java)到中间语言(CIL/MSIL 或 JVM 字节码)的编译器可能不想优化其发出的代码,因为:
Eric Lippert 的关于 C# 编译器/optimize标志的博客文章支持编译器更喜欢做更少优化的概念,将它留给 .NET JIT:
这些是非常简单的优化;没有内联 IL,没有循环展开,没有任何过程间分析。我们让 jitter 团队担心在代码实际上被吐到机器代码时优化代码;那是您可以获得真正胜利的地方。