Windows任务pipe理器中的我的MMF(内存映射文件)内存在哪里?

两个应用程序通过MMF共享内存。 一个创buildMMF(约1GB),B按名称打开该MMF文件。 当我看到Windows任务pipe理器时,A有1GB内存。 但是,几次closures和启动B应用程序后,(或一天后,我不知道如何重现)A的Windows任务pipe理器中的内存低于1K字节。

我的猜测是,也许是因为一个应用程序在创buildMMF后没有做任何事情,所以,Windows认为MMF属于B应用程序。 (只是猜测)。

我的操作系统是Windows 2003 Enterprise x64,SP2。

有人知道原因吗? 提前致谢。

内存映射文件仍然是您的虚拟地址空间的一部分 ,使用perfmon来获得可靠的计数器,而不是任务管理器,随每个版本的Windows而变化。 Process |的Perfmon计数器 虚拟字节(总VAS)是最有趣的。

我的理解是,1GB被保留在虚拟地址空间,但内存只是实际分配给被触摸的页面。 内存映射文件与虚拟内存API并行实现,并且都建立在NT虚拟内存管理器上。 看到这篇文章和图解说明。

你用数据填满了整个文件,还是只分配了1GB?

更新:

您在任务管理器中查看哪列?

默认的Memory(Private Working)代表物理分配的内存。

您可以添加“提交大小”列以查看分配给进程的虚拟地址空间总量。

这里是你可以在任务管理器中看到的各种内存统计信息的总结及其含义。

这是因为内存工作集最小化 。

感谢大家。 🙂