编译技术全解析:从基础到优化
1. 编译过程概述
在大多数情况下,我们虽不亲自编写汇编代码,但编译器生成代码的特性,如速度、大小和功耗,却至关重要。了解编译器的工作原理,有助于我们编写代码,并引导编译器生成所需的汇编语言实现。
编译过程可概括为:将高级语言程序转换为低级指令形式,同时进行优化,以生成比直接翻译源代码语句更优的指令序列。优化技术会着眼于程序的更多部分,确保对某一语句看似有利的编译决策,不会给程序的其他部分带来不必要的问题。
编译通常从 C 或 C++ 等高级语言代码开始,一般会生成汇编代码。高级语言程序首先会被解析成语句和表达式,同时生成包含程序中所有命名对象的符号表。部分编译器会进行高级优化,可视为在不参考指令的情况下修改高级语言程序输入。例如,简化算术表达式就是一种与机器无关的优化。
指令级优化旨在生成代码,可直接作用于真实指令或伪指令格式,后续再映射到目标 CPU 的指令。这种优化还能通过让代码生成创建更简单的代码,后续再进行优化,从而实现编译器的模块化。
以数组访问代码 x[i] = c∗x[i]; 为例,简单的代码生成器会为 x[i] 生成两次地址,而后续优化阶段可识别出这是无需重复的公共表达式。先生成简单代码再进行优化,能得到更好的代码和更可靠的编译器。
2. 基本编译方法
2.1 语句翻译
这部分主要考虑在很少或不进行优化的情况下,翻译高级语言程序的基本工作。
2.2 过程
过程(在 C 语言中称为函数)需要专门的代码。用于调用和传递参数的代码称为过程链接,过程还
超级会员免费看
订阅专栏 解锁全文


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



