Windows内存管理中的备用列表是什么?

voi*_*ter 6 c++ windows memory-management

Windows中的内存管理方案非常复杂,我正在尝试更好地理解它,以便更准确地诊断内存问题.

例如,我们的C++应用程序(在SysInternal的Process Explorer中)显示1.4GB"虚拟大小",400MB"私有字节"和366MB"工作集".

我做了一些研究,发现了这个问题: 什么是私有字节,虚拟字节,工作集?

这是一个很好的阅读,但有些事情仍然没有加起来.具体而言,最高投票答案表明虚拟字节包括备用列表.我不确定这些是什么,我所做的任何研究对它的解释都不太友好.我最大的问题是:将页面移动到备用列表会如何影响应用程序的虚拟地址空间(如果有的话)?换句话说,虚拟大小比任何其他大小都大得多,是不同的碎片内存?

如果有人能帮我理解这一点,我会非常感激.提前致谢!

Eri*_*rik 7

在一个简单的场景中,一段时间未使用的页面将从进程中删除,清除并放在空闲列表中,以便任何其他进程可以在需要更多内存时使用它.

使用备用列表,页面将从进程中删除,而不是修改,并放在备用列表中.如果同一个进程碰巧需要该页面,则立即返回.如果另一个进程需要更多内存,则清除该页面并将其提供给该进程.

所以,简而言之,内存管理器保持初始化内存,以防万一最初使用它的进程应该想要它回来 - 但如果其他人想要更多内存,他们将获得它.

  • @RobertDailey:是的,可能.C++内存管理器不知道也不关心后备页是否存在,待机或完全换出.当您从应用程序访问*虚拟地址*时,OS内存管理器将根据需要将物理页面映射到该虚拟地址,并在需要时从交换文件中填入数据. (3认同)