编译器优化
局部优化(常量折叠、公共子表达式消除)、循环优化(不变量外提、展开、向量化)、过程间优化(内联)。本章解释优化的正确性约束(不能改变可观察行为)、未定义行为在其中的角色,以及为什么 -O3 有时更慢。
- 未定义行为是编译器优化的许可证,也是 C 程序 bug 的温床
- 内联是其他优化的使能者
- 别名分析限制了很多优化
局部优化(常量折叠、公共子表达式消除)、循环优化(不变量外提、展开、向量化)、过程间优化(内联)。本章解释优化的正确性约束(不能改变可观察行为)、未定义行为在其中的角色,以及为什么 -O3 有时更慢。