2.1 被隐藏的过程 :预处理 编译 汇编 链接四个过程
预处理:现象就是.c文件变为.i文件 C++就是变为.ii文件 实际内涵就是#define删除,所有宏定义替换源代码里的内容等一些带#的代码处理和注释删除。行号和文件标识也是现在弄的,调试方便定位位置。
编译 现象就是.i变.s 进行语法分析、语义分析以及优化后生产的相应的汇编代码文件,这是核心部分。
汇编 .s 变.o 照着汇编表 一句汇编对应一句机器指令。
链接 看静态链接部分
2.2 编译器做了什么 思考 voliate防止优化在哪个步骤?
首先通过扫描器 进行语法分析【编译环节】 接下来是语法分析器 就是一个所谓的语法树 再有一个语义分析器 【这两个就是对表达式语法层面的分析】 编译器有着很多层次的优化 首先中间语言的生成 就是在源代码级别进行优化 如 2+6 直接优化成8 但是难以在语法树上表示,就语法树转换成一个中间代码 编译器前端产生中间代码 后端把中间代码转化为可执行的目标代码。 后端又包括代码生成器,目标代码优化
代码生成就是把中间代码生成目标机器代码,根据不同机器的字长,寄存器等 最后目标代码优化根据选择合适寻址方式 ,用位移代替乘法,删除多余指令等。
2.3链接器年龄比编译器长
2.4静态链接 作用 各个模块相互引用的部分处理好,链接器就是调整因为引用改变的变量和函数的地址。包括了 地址和空间分配、符号决议、重定位。