编译器操作、代码生成与输出格式详解
1. 控制编译器优化
默认情况下,大多数编译器几乎不进行优化,通常需要我们明确告知编译器进行优化。这看似有悖常理,毕竟我们都希望编译器能为我们生成最优代码。然而,“最优”有多种定义,没有一种编译器输出能满足所有定义。所以,多数编译器只有在我们明确要求时才开启优化。
编译器默认不进行优化,主要有以下原因:
- 优化过程缓慢 :关闭优化器能加快编译周转时间,在快速编辑 - 编译 - 测试循环中很有帮助。
- 调试问题 :许多调试器无法与优化后的代码正常工作,使用调试器时需关闭优化。
- 编译器缺陷 :大多数编译器缺陷出现在优化器中,生成未优化代码可降低遇到编译器缺陷的概率。
大多数编译器提供命令行选项来控制优化类型。早期的 Unix C 编译器使用 -O 、 -O1 和 -O2 等命令行参数控制优化阶段,后来的许多编译器也采用类似策略。
编译器提供多个优化选项而非单一选项,是因为不同人对“优化”有不同需求:
- 有人希望代码空间优化。
- 有人希望代码速度优化,且这两种优化在某些情况下可能相互排斥。
- 有人希望少量优化,且不希望编译器处理文件耗时过长。
- 有人希望针对特定 CPU 家族成员进行优化。
- 某些优化只有在程序以特定方式编写时才“安全”。
- 对于精心编写高级语言(HLL)代码的程序员,编译器的某些优化可能产生劣质代码。 <
超级会员免费看
订阅专栏 解锁全文
1467

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



