(1)预编译过程:(.i) 1.删除#define文本替换 2.#if#endif #elif 3.#include递归展开 4.删除注释 5.添加行号(主要目的是为了方便调试) 6.保留#pragma (2)编译(.s) 1.词法分析(例:int 8a=10//变量不能以数字开头 2.语法分析(根据一条表达式分析) 3.语义分析(根据上下文分析) 4.代码优化 5.生成汇编指令 (3)汇编过程(.o) 翻译指令 (4)链接(.exe) 1.合并段和符号表,确定段大小起始偏移 2.符号解析 3.分配地址空间 4.符号重定位 运行过程: 1.创建虚拟地址空间和物理内存的映射(内核映射结构体)(Linux下进程控制块) 创建目录,页表 2.加载指令和数据 3.入口地址写入下一行指令寄存器 虚拟地址分布图: