内存
程序需要先放到内存才能被CPU处理–缓和CPU和硬板之间的速度矛盾
如何区分各个程序的数据放在哪里
- 内存从0开始,每个分配的地址对应一个存储单元
- 如果是按照字节编址的,一个地址代表一个字节,1B
- 如果按字编址的,一个存储单元代表一个字,存储单元大小代表一个字长
装入模块(可执行文件)指令表明的地址一般是逻辑地址
在内存中的为物理地址
主要问题:如果实现逻辑地址到物理地址的映射
三种装入方式
tips:装入:把可执行文件装入内存
-
绝对装入
- 开始就知道程序在内存中什么位置,逻辑地址 == 物理地址
- 适合单道程序环境
-
静态重定位,可重定位装入
- 从0开始的逻辑地址
- 在装入的时候,把所有地址相关的参数都加上起始地址
- 必须分配要求的所有内存空间
- 运行的时候不能再移动
3,动态重定位
- 使用专门的寄存器,装入起始地址
- 允许程序在内存中发生移动
从写程序到程序运行
编辑(.c) —> 编译(.0)目标模块 --> 链接成装入模块(完整的逻辑地址).exe
链接的三种方式
- 静态链接:在运行之前,先将各个模块和需要的库函数连接成一个完整的可执行文件,不再拆开
- 装入时动态链接:将各个目标装入模块,一边装一边链接
- 运行时动态链接,需要执行该目标模块,才对它进行链接