Windows内存体系(2) -- 页交换文件

一、页交换文件

虚拟地址空间只是操作系统为进程“虚拟”出来的一块地址区域,并不代表任何实际的空间。而“页交换文件”却对应了实际的空间,这个空间一般是磁盘上名为“pagefile.sys”的文件。

“页交换文件”的大小和位置可以在系统设置(系统属性 -> 高级 -> 性能 -> 设置 -> 高级 )中进行设置:
这里写图片描述

从微软的官方文档来看,“虚拟内存”等于“物理内存”+“分页文件”总和。可以把“虚拟内存”理解为Windows的一种内存管理机制。

二、虚拟地址空间、页交换文件、物理内存

虚拟地址空间、页交换文件、物理内存三者的关系如下图:
这里写图片描述

《Windows核心编程》第13章关于“物理存储器和页交换文件”章节中讲到了“页交换文件、物理存储器之间的数据交换过程”,流程如下:

这里写图片描述

应用程序从进程的虚拟地址空间预定并调拨了一块地址区域时,起初这块区域只是从“页交换文件”中调拨的,这样作有个好处就是:因为还不确定何时才会使用这块区域,如果立即从物理内存调拨,会将占用很多的物理内存。
当程序读写该地址区域时,此时就会出现上面图上的页交换文件和物理内存之间的数据交换过程。

三、将页面锁定在物理内存

从上面的几节我们知道,当物理内存中没有闲置页面时,系统会将内存中的某些页面的数据写入到交换文件中,从而将该物理内存区域释放出来供后面的程序使用。

我们可以通过调用VirtualLock方法,将页面锁定在物理内存中,从而防止虚拟内存管理机制将页面交换至页面文件,而引起不必要的硬盘和物理内存之间的低效页面交换。

也可以通过调用VirtualUnlock方法解锁页面,允许系统对页面进行交换操作。

需要注意的是,锁定页面时系统会根据当前可用实际物理内存情况,以及进程工作集配额判定当前最大可锁定的页面的实际数量,超过此数量会引起一个错误。我们可以调用SetProcessWorkingSetSize可以改变一个进程工作集大小的配额,从而可以锁定更多的物理页面。

china_jeffery CSDN认证博客专家 C/C++ Qt Node.js
持续学习者;
擅长开发开源组件及相关工具;
长期致力于应用各种IT新技术提升生产效率和解决实际问题;
china_jeffery@163#com
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值