2

两个应用程序通过 MMF 共享内存。A 创建 MMF(约 1GB),B 按名称打开该 MMF 文件。当我看到 Windows 任务管理器时,A 有 1GB 内存。但是,在几次关闭并再次启动 B 应用程序后,(或 1 天后?我不确定如何重现)A 在 Windows 任务管理器中的内存低于 1K 字节。

我的猜测是,可能是因为 A 应用程序在创建 MMF 后没有做任何事情,所以,Windows 认为 MMF 属于 B 应用程序。(只是猜测)。

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

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

4

3 回答 3

1

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

于 2010-01-22T02:40:40.033 回答
0

我的理解是在虚拟地址空间中保留了1GB,但实际上只为被触摸的页面分配了内存。内存映射文件与虚拟内存 API 并行实现,并且都建立在 NT 虚拟内存管理器之上。有关说明,请参阅本文和图表

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

更新:

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

默认内存(私有工作)表示物理分配的内存。

您可以添加 Commit Size 列来查看分配给进程的虚拟地址空间总量。

以下是您可以在任务管理器中看到的各种内存统计数据及其含义的摘要。

于 2010-01-22T02:30:47.513 回答
0

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

谢谢大家。:)

于 2010-01-22T03:49:24.730 回答