编译时间和加载时间地址绑定的区别
地址绑定是程序指令和数据与实际物理内存位置的关联。操作系统中有各种类型的地址绑定。
地址绑定有 3 种类型:
- 编译时地址绑定
- 加载时地址绑定
- 执行时间地址绑定
在这里,我们比较编译时间和加载时间地址绑定如下。
编译时地址绑定: 如果编译器负责执行地址绑定,则称为编译时地址绑定。这种类型的地址绑定将在将程序加载到内存之前完成。编译器需要与操作系统内存管理器交互以执行编译时地址绑定。
加载时间地址绑定: 这种类型的地址绑定将在程序加载到内存后完成。加载时地址绑定将通过操作内存管理器来完成。
编译时间和加载时间地址绑定的区别:
编译时地址绑定 | 加载时地址绑定 |
---|---|
编译器负责编译时的地址绑定。 | 加载器负责加载时的地址绑定。 |
编译时地址绑定生成逻辑地址(虚拟地址)。 | 加载时地址绑定生成物理地址。 |
编译时地址绑定是在将程序加载到内存之前完成的。 | 加载时地址绑定是在程序加载到内存后完成的。 |
指令被翻译成绝对地址。 | 绝对地址转换为可重定位地址。 |
代码在这里编译。 | 指令被加载到内存中。 |
编译时地址绑定适用于逻辑地址。 | 加载时地址绑定适用于物理地址。 |
编译时地址绑定是静态地址绑定。 | 加载时地址绑定也是静态地址绑定,但在某些操作系统中它支持动态地址绑定。 |
编译器与操作系统内存管理器交互来执行它。 | 加载时地址绑定由操作系统内存管理器本身完成。 |