【问题标题】:Where is my MMF(Memory-Mapped-File) memory in Windows Task Manager?Windows 任务管理器中的 MMF(内存映射文件)内存在哪里?
【发布时间】:2011-01-08 01:03:02
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: windows memory taskmanager


    【解决方案1】:

    我的理解是在虚拟地址空间中保留了1GB,但实际上只为被触摸的页面分配了内存。内存映射文件与虚拟内存 API 并行实现,并且都建立在 NT 虚拟内存管理器之上。请参阅此article and diagram 以获得解释。

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

    更新:

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

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

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

    Here is a summary 您可以在任务管理器中看到的各种内存统计信息及其含义。

    【讨论】:

    • 我创建 MMF 来加载一些资源。所以,我用数据填充那个 MMF。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      因为memory working set minimize

      谢谢大家。 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-30
        • 2010-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多