29 | 中端总结:不遗余力地进行代码优化
宫文学
该思维导图由 AI 生成,仅供参考
你好,我是宫文学。
今天这一讲,我继续带你来总结前面解析的 7 种真实的编译器中,中端部分的特征和编译技术。
所以,今天这一讲,我们主要来总结以下这两方面的问题:
第一,是对 IR 的总结。我在第 6 讲中曾经讲过,IR 分为 HIR、MIR 和 LIR 三个层次,可以采用线性结构、图、树等多种数据结构。那么基于我们对实际编译器的研究,再一起来总结一下它们的 IR 的特点。
通过今天的总结,你能够对中端的两大主题 IR 和优化,形成更加深入的理解,从而更有利于你熟练运用编译技术。
好了,我们先来把前面学到的 IR 的相关知识,来系统地梳理和印证一下吧。
对 IR 的总结
通过对前面几个真实编译器的分析,我们会发现 IR 方面的几个重要特征:SSA 已经成为主流;Sea of Nodes 展现出令人瞩目的优势;另外,一个编译器中的 IR,既要能表示抽象度比较高的操作,也要能表示抽象度比较低的、接近机器码的操作。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
编译器中端的关键主题是IR和优化。IR方面,SSA格式的IR提供了便利的use-def链,Sea of Nodes结合了数据流图和控制流图,便于全局优化。编译器通过层层Lower的过程,将程序的语义从高级语言逐步变到了汇编语言。优化算法往往以分析为基础,主要是机器无关的优化。对于解释执行的语言,编译器能做的优化有限,而对于动态类型的语言,类型推断是首要任务。JIT编译器可以充分利用推理性的优化机制,带来更好的优化效果。内联优化和逃逸分析对面向对象的语言非常重要。文章通过具体例子和图示生动地展现了不同编译器对数组加法的优化效果,使读者更易理解和把握这些编译器的优化特点。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理实战课》,新⼈⾸单¥59
《编译原理实战课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- pedro外行看语言,内行看编译器2022-06-231
- Geek_64affe我们的数据引擎,可以学习julia的方法了,根据类型编译成不同版本的函数,一定可以降低运行时的类型判断开销2022-04-13
收起评论