8

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

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

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

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

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

4

2 回答 2

9

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

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

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

于 2012-06-18T19:32:26.693 回答
0

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

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

于 2012-06-18T19:30:56.760 回答