【发布时间】:2010-10-30 14:10:10
【问题描述】:
我将继续为我的编译器类开发 C# 编译器。目前,我几乎完成了教科书中关于编译器优化的章节。
在大多数情况下,我的教科书在编写时并没有考虑到即时编译,我很好奇 C# 编译器执行的静态预jit 优化与它在JIT 流程?
当我与人们谈论针对 CLR 进行编译时,我通常会听到诸如“大多数优化由 JIT 完成”之类的话。
循环展开、常量折叠/传播、指令交织等事情是由 C# 的编译器预先完成还是由抖动处理?如果它们没有被抖动处理,那么抖动会做什么样的优化,这是即时编译器所独有的?
【问题讨论】:
-
你提到的大部分优化都是由抖动完成的。 C# 编译器会进行常量折叠,因为这是语言语义所要求的。使用 /o 运行的 C# 编译器仅执行简单的 IL 控制流优化,例如消除“分支到下一条指令”。这是一个很好的话题;我会看看我是否可以写一篇关于我们在 IL 级别进行哪些优化的博客文章。在下个月左右观看我的博客以获取详细信息。 ——
-
@Eric Lippert,太好了!没想到微软编译器团队的高级开发人员会做出回应!如果你记得,当你发表你的博客文章时,一定要从这里链接到它。反正我会留意的。谢谢埃里克。
-
不客气。文章将于 6 月 11 日上架。
标签: c# optimization compiler-construction jit