MS-Windows编程中的内存管理与相关操作
1. 线性地址与逻辑地址转换
在多任务操作系统中,多个程序可同时在内存中运行,每个程序都有自己的数据区域。例如,若三个程序都有一个偏移量为200h的变量,x86处理器会通过一到两步的过程将每个变量的偏移量转换为唯一的内存位置。
- 第一步 :将段值与变量的偏移量相结合,创建线性地址。线性地址是一个32位整数,范围在0到FFFFFFFFh之间,它指向一个内存位置。若禁用分页功能,线性地址可能就是目标数据的物理地址。
- 第二步 :像MS - Windows和Linux等操作系统采用分页功能,允许程序使用比计算机物理内存更多的线性内存。此时需要进行页转换,将线性地址转换为物理地址。
线性地址的计算方式为:每个段选择器指向描述符表中的一个段描述符,该描述符包含内存段的基地址。将逻辑地址中的32位偏移量加到段的基地址上,就生成了32位线性地址。如下流程图所示:
graph LR
A[逻辑地址(选择器 + 偏移量)] --> B[段描述符表]
B --> C[段描述符(含基地址)]
A --> D[偏移量]
C --> E[基地址]
D --> F[相加]
E --> F
F --> G[线性地址]
2. 分页功能
分页是x86处理器的重要特性,它使计算机能够运行原本无法全部装入内存的程序组合。处理器最初只将程序的一部分加载到内
Windows内存管理与编程操作
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



