一个源文件到可执行文件的一个过程
预编译 编译 汇编 链接
1 预编译:处理所有带有#所有条件的预编译指令 (并展开所有的宏定义) 例如 #if # elif #endif等
处理#include等预编译指令,将包含的头文件插入预编译指定的位置
删除所有注释
添加行号和文件名的标识
2编译: 代码的优化 加上gcc -O (优化的级别)
汇总符号表
词法分析:将源代码的字符序列分割成一系列的记号,并将标识符放到符号表里,分类存放
语法分析:确定一些符号的在表达式中的含义,一些符号的优先级和符号的含义确定了下来,表达式中缺少的操作符等的检测
语义分析:一个语句在语法上是合法的,但在实际是否存在意义例如两个指针相乘是没有任何意义的;
3 汇编:将汇编代码转化成本机操作系统可识别的机器码
4 链接:(1)将所有的.o文件段进行合并,符号表进行合并(符号解析)分配虚拟的地址。
符号解析;为未定义的符号找到其定义的的地方
(2)符号重定向(将无地址的符号为其替换成正确的虚拟地址)。
5 运行 x86体系 32 位系统 分配4G大小的虚拟地址空间
1虚拟地址的映射
1.