什么是 Windows 内存管理中的待机列表


Windows

中的内存管理方案非常复杂,我试图更好地理解它,以便我可以更准确地诊断内存问题。

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

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

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

如果有人能帮助我更好地理解这一点,我将不胜感激。提前感谢!

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

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

因此,简而言之,内存管理器会保留初始化的内存,以防最初使用它的进程想要它 - 但如果其他人想要更多内存,他们会得到它。

备用列表实际上是当前缓存的内存页列表,但可以丢弃这些页以便为其他应用程序释放内存。

鉴于此,将页面移动到备用列表不会影响应用程序的虚拟地址空间,因为进程不会认领列表中的内存,尽管进程能够在需要时快速回收它。

最新更新