编译 ——链接

一个源文件到可执行文件的一个过程

预编译   编译   汇编   链接


1 预编译:处理所有带有#所有条件的预编译指令 (并展开所有的宏定义) 例如 #if  #  elif  #endif等

                   处理#include等预编译指令,将包含的头文件插入预编译指定的位置

                  删除所有注释

   添加行号和文件名的标识

2编译:  代码的优化  加上gcc -O (优化的级别)

汇总符号表

                 词法分析:将源代码的字符序列分割成一系列的记号,并将标识符放到符号表里,分类存放

 语法分析:确定一些符号的在表达式中的含义,一些符号的优先级和符号的含义确定了下来,表达式中缺少的操作符等的检测

语义分析:一个语句在语法上是合法的,但在实际是否存在意义例如两个指针相乘是没有任何意义的;

3 汇编:将汇编代码转化成本机操作系统可识别的机器码

4 链接:(1)将所有的.o文件段进行合并,符号表进行合并(符号解析)分配虚拟的地址。

符号解析;为未定义的符号找到其定义的的地方

(2)符号重定向(将无地址的符号为其替换成正确的虚拟地址)。

5 运行 x86体系 32 位系统    分配4G大小的虚拟地址空间

            


1虚拟地址的映射

1.