繁体   English   中英

C#编译器和JIT都做了哪些优化?

[英]What kind of optimizations do both the C# compiler and the JIT do?

我继续在我的编译器类的C#编译器上工作。 目前我已经完成了教科书中关于编译器优化的章节。

在大多数情况下,我的教科书在编写时没有考虑到及时编译,我对C#编译器执行的静态,预jit优化的种类与JIT过程中的执行情况感到好奇?

当我与人们谈论有关CLR的编译时,我通常会听到类似的事情,“大多数优化都是由JIT完成的”。

是循环展开,常量折叠/传播,C#编译器在Jit之前完成指令交织还是由抖动处理? 如果它们不是由抖动处理的,那么抖动对于即时编译器所做的那种优化是什么?

我可以想象有一些JIT独有的优化; 具体来说,任何依赖于应用程序运行的环境/上下文的优化。(注意,以下所有都是假设的,我不确定,实际执行了哪些或者其中任何一个)

最无聊:JIT可以根据32位/ 64位底层操作系统进行优化,甚至可能取决于确切的处理器架构。

不适用: 更有趣:当应用程序未在调试上下文中运行时,JIT可以优化仅在调试模式下运行的任何内容(例如某些条件代码)。

最有趣的是:JIT可以在仅依赖于readonly字段的类中优化条件分支,因为至少理论上该值在类的执行期间永远不会改变。

基本上我认为推迟优化直到JIT通常是要走的路,因为在JIT时间,关于代码实际运行的上下文的信息最多,使得更有意义的优化成为可能。

David Notario在他的博客上有一些帖子(你可以从这里开始 ,然后走历史),但它们相当粗略。

我不认为C#编译器会进行任何优化。 JIT完成所有工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM