程序从源代码到在内存中执行,需要经过编译、链接、装入三个阶段。
将编译/汇编产生的多个可重定位目标文件合并为一个可执行目标文件,主要完成两个任务:
将可执行文件从磁盘加载到内存,并建立进程映像。
| 方式 | 特点 | 优点 | 缺点 |
|---|---|---|---|
| 静态链接 | 装入前完成所有链接 | 运行速度快 | 文件大,更新需重新链接 |
| 装入时动态链接 | 装入内存时链接共享模块 | 便于共享 | 装入时间长 |
| 运行时动态链接 | 执行到需要时才链接 | 节省内存,便于更新 | 运行时有延迟 |
| 方式 | 地址转换时机 | 特点 |
|---|---|---|
| 绝对装入 | 编译时 | 程序必须装入指定地址,不灵活 |
| 可重定位装入(静态重定位) | 装入时 | 装入时一次性转换,装入后不能移动 |
| 动态运行时装入(动态重定位) | 执行时 | 运行时通过重定位寄存器动态转换,支持程序移动 |
| 地址类型 | 说明 |
|---|---|
| 逻辑地址(虚拟地址) | 程序中使用的地址,从 0 开始 |
| 物理地址 | 内存中的实际地址 |
| 逻辑地址空间 | 程序员看到的地址空间 |
| 物理地址空间 | 实际内存的地址空间 |
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。