程序生命周期主要包括5个部分:
- 编写源代码
- 编译
- 链接
- 转载
- 执行
编译阶段
从广义上讲,编译就是将某种编程语言(高级语言:C/C++)的源代码转为另一种编程语言(低级语言:汇编。机器代码)的源代码。其中交叉编译指在同一平台上进行编译,生成的代码可以在其他平台上执行,例如在桌面操作系统上生成嵌入式设备或移动设备的代码。编译的过程分为5个阶段:
- 预处理阶段
- 语言分析阶段
- 汇编阶段
- 优化阶段
- 代码生成阶段
其中预处理阶段实现:
- 将#include包含的文件或者头文件包含到源代码文件中
- 将#define指定的值转化为常量
- 将调用宏的位置转为代码
- 根据#if,#elif和#endif指令的位置包含或者排除特定部分的代码
其中语言分析阶段功能:
- 删除注释和不必要的空格等操作
- 检查程序的语法规则(词法分析,语法分析,语义分析)
其中汇编阶段是将标准集合转为特定CPU指令集的语言集合;
其中优化阶段将程序的寄存器使用率最小化,删除冗余代码;
其中代码生成阶段:每个目标文件对应一个编译单元,汇编指令会在此阶段转为对应机器指令的二进制值,并写入目标文件的特定位置。
链接阶段
链接的输入就是目标文件的集合,由编译阶段预先生成,主要包含重定位和解析应用。