【问题标题】:Why doesn't the C# compiler inline MSIL code? [closed]为什么 C# 编译器不内联 MSIL 代码? [关闭]
【发布时间】:2018-06-16 10:29:27
【问题描述】:

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

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

是因为收益微乎其微吗?还是根本没有实施?

【问题讨论】:

  • 嗨,Slai,这不是一回事。我在问为什么 C# 编译器不会自动为我们执行此操作,而不是如何手动执行此操作。不过还是谢谢。
  • 为什么这被否决了?有一个问题可以简明扼要地回答“由于 x 而没有完成”,建议进行编辑或在您认为不合适的情况下提出更好的问题。
  • 这是一个问题:如果在运行时从不使用函数,这样做有什么好处?
  • 没有任何好处,函数内联显然有利有弊。如果它被使用数千次,它会增加你的代码大小,但如果它在许多情况下还能提高 C++ 程序的性能。

标签: c# optimization inline-assembly jit cil


【解决方案1】:

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 的内联,没有循环展开,没有任何过程间分析。我们让 jitter 团队担心当代码实际被吐出到机器代码中时如何优化代码;在那里你可以获得真正的胜利。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
相关资源
最近更新 更多