一、编译流程
二、预处理
C语言编译器在对源代码编译之前的一步操作。
功能 | 作用 |
---|---|
头文件展开 | 将程序中所用的头文件用其内容替换头文件名 |
宏替换 | 扫描程序中的符号,将其替换成宏所定义的内容 |
去注释 | 去掉程序中的注释 |
条件编译 | 筛选掉条件编译中的伪命令 |
三、编译
编译的过程实质上是把高级语言翻译成机器语言的过程。
- 词法、语法、语义分析。在确认所有指令都符合规则后,将其翻译成等价的汇编代码。
- 代码优化。删除公共表达式,循环优化、复写传播、无用赋值的删除。
- 目标代码优化。利用机器的各个硬件寄存器存放的相关变量的值,以减少对内存的访问次数。
四、汇编
汇编过程就是将编译后生成的汇编语言代码翻译成目标机器指令的过程。
汇编目标文件中所存放的也就是与源程序等效的目标的机器语言代码。目标文件由段组成。通常一个目标文件中至少有两个段。
段名 | 作用 |
---|---|
代码段 | 程序的指令 |
数据段 | 程序中要用到的各种全局变量或静态的数据 |
五、链接
链接的功能是完成文件中各种调用的函数以及库的连接,并将它们一起打包合并形成可执行文件。
- 符号决议
确定所使用的变量要有其唯一的定义。 - 重定位
通过链接器将不同的目标文件中的数据和代码重新分配内存地址,使得CPU能从内存中找到指令。