说明:本文参考Wikipedia的文章形成。感兴趣可以参见英文链接。
0.什么是一个Optimizing Compiler ?
Optimizing Compiler (后文以“优化编译器”代之) 就是试图最小化或最大化某些可执行文件属性的编译器。[1]
优化可能的方向
- 执行时间
- 内存开销
- 执行文件大小
- 低功耗
后两者经常会出现在嵌入式程序开发中。笔者曾经参与过相关的开发,品尝过抢code size的滋味(在项目刚开始写一些相对占size更大的code, 但功能没问题的,先把size占了,等后面不够了,把这段代码优化一下,size又挤出来了)
优化编译器常用的优化实现形式?
它通常被实现为一个优化转换的序列,该序列将会把程序转换成语义上等价的一个输出程序。该程序执行会更快或消耗更少的资源。(以LLVM为例,IR级别的优化就是一个或多个PassManager中代表的所有Pass集合)
1.优化的分类
根据优化所作用的域来分类,可以有如下类型
1 Peephole优化
通过检查一些相邻的指令(像通过一个小孔一样窥视整体代码)来看,它们是否可以由另外一个或一组更短的指令代替。
常见的有,Strength reduction, 代数简化,等等。
1.2 Local优化
局限于某个Basic Block的优化。
利弊:分析少,时间少
本文介绍了优化编译器的工作原理和分类,包括Peephole、Local、Global、Loop等优化,以及影响优化的因素如机器架构、代码用途。编译器优化旨在减少执行时间、内存开销,通过避免冗余、减少跳转、利用内存层级等方式提升性能。
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



