C++总复习--1--编译链接运行原理
1.编译链接原理过程:
(1)预编译
(2)编译
(3)汇编
(4)链接
(5)运行
2.虚拟地址空间布局
1.编译链接原理过程:
ALU 的宽度:一次最多能处理的bit位为32 位或者64位
32:2^32大小内存
实模式和保护模式:为防止恶意篡改其他进程内容
编译链接运行原理:
(1)预编译
#define,宏替换
删除宏定义并做文本替换
#include
递归展开头文件
#if #endif等
预编译指令
删除注释
添加行号和文件标识
保留#pragam的指令
(2)编译 .s
词法分析
语法分析
语义分析
代码优化 优缺点:提高效率 不可控
生成汇编指令
(3)汇编 .0 目标文件 可重入的二进制文件
翻译指令
项目:N多的源文件构造 前三个过程都是已编译单元整理的,分开的
汇编遗留的问题:
- 弱符号处理(只有C语言里有)
- 符号表:?Sun@@YAHHH@Z *UND* 外部符号
- 指令段:外部符号的地址 虚假地址||虚假偏移
(4)链接 .exe
合并段和符号表
符号解析
分配地址和空间
符号的重定位
(5)运行
创建虚拟地址空间和物理内存的映射(创建内核映射结构体)
创建页目录,页表
加载指令和数据
(main)程序的入口地址写入到下一行指令寄存器