【问题标题】:What does "VM Size" mean in the Windows Task Manager? [closed]Windows 任务管理器中的“VM 大小”是什么意思? [关闭]
【发布时间】:2010-09-06 20:16:24
【问题描述】:

从计算机大小的角度来看,虚拟内存是

[制作程序的一种方式] 思考它 有大范围的连续 地址;但实际上它的部分 目前使用的是分散 RAM 周围,非活动部分是 保存在磁盘文件中。 (Wikipedia)

我会将 Windows 任务管理器中的 VM 大小解释为总可寻址虚拟内存空间或进程当前在虚拟内存空间中使用的内存量。

但在任务管理器中,WM 大小在许多情况下小于 Mem Usage,这应该是进程正在使用的 RAM 量。因此我猜 WM Size 意味着别的什么?

【问题讨论】:

    标签: windows operating-system


    【解决方案1】:

    我在 Windows 任务管理器中看不到 VM 大小,Whatup Gold 在其任务管理器中有一个 VM 大小 - 你是说这个吗?在这种情况下,我相信它与 VM 可用的总量有关

    【讨论】:

    • 查看 -> 选择列... -> 虚拟内存大小
    【解决方案2】:

    这是此进程分配的所有私有(非共享)字节的总和,无论当前是否在物理内存中。

    另请参阅An introductory guide to Windows Memory ManagementCommit Charge Wikipedia article

    对于像这样查看进程状态的开发人员,我建议安装SysInternals Process Explorer 并使用它而不是默认的任务管理器。这个值在里面叫做“Private Bytes”。

    【讨论】:

    • 感谢 SysInternals Process Explorer 的链接
    【解决方案3】:

    关于虚拟机大小的正确答案是什么?

    • 在编码恐怖中

      有多少进程不常用的内存已分页到磁盘。

    • 对编码恐怖的评论

      您在虚拟机大小上错了。它是此进程分配的所有私有(非共享)字节的总和,无论当前是否在物理内存中。跟踪您是否有内存泄漏比“内存使用”更有价值。性能监视器中的值与“进程:私有字节”相同。

    • 在 MSDN 中

      虚拟内存大小: 提交给进程的虚拟内存或地址空间量。

    我混淆了什么是正确的。

    【讨论】:

      【解决方案4】:

      映射到该进程地址空间的内存量。这可以包括共享内存映射。

      在一个进程中,每个共享对象 (DLL) 都会有一部分内存空间,以及一些用于堆栈的内存,以及由进程本身分配的区域。

      例如,查看我系统上cat 命令的内存映射,我可以看到它的内存映射。在这种情况下,我使用cat /proc/self/maps 来调查 cat 进程本身。映射到其虚拟内存的是二进制文件本身、一些堆、语言环境信息、libc(带有各种权限标志)、ld.so(动态链接器)、堆栈、vdso 和 vsyscall 部分以及一些匿名映射(没有后备文件的映射页面)。

      00400000-00408000         r-xp      /bin/cat
      00607000-00608000         rw-p      /bin/cat
      008ac000-008cd000         rw-p      [heap]
      7fbd54175000-7fbd543cf000 r--p      /usr/lib/locale/locale-archive
      7fbd543cf000-7fbd54519000 r-xp      /lib/libc-2.7.so
      7fbd54519000-7fbd54718000 ---p      /lib/libc-2.7.so
      7fbd54718000-7fbd5471b000 r--p      /lib/libc-2.7.so
      7fbd5471b000-7fbd5471d000 rw-p      /lib/libc-2.7.so
      7fbd5471d000-7fbd54722000 rw-p
      7fbd54722000-7fbd5473e000 r-xp      /lib/ld-2.7.so
      7fbd5491d000-7fbd5491f000 rw-p 
      7fbd5493a000-7fbd5493d000 rw-p
      7fbd5493d000-7fbd5493f000 rw-p      /lib/ld-2.7.so
      7fff5c929000-7fff5c93e000 rw-p      [stack]
      7fff5c9fe000-7fff5c9ff000 r-xp      [vdso]
      ffffffffff600000-ffffffffff601000 r-xp    [vsyscall]
      

      对于每个映射,从结束地址中减去开始地址以确定其大小,例如[stack] 行:0x7fff5c9ff000 - 0x7fff5c9fe000 = 0x1000。十进制,4096 字节 - 4 kiB 堆栈。

      如果将所有这些数字相加,您将获得进程的虚拟内存 (VM) 大小。

      VM 大小不是确定进程正在使用多少内存的可靠方法。例如,每个只读/lib/libc-2.7.so 映射在物理内存中只有一个副本,无论有多少进程使用它。

      【讨论】:

        【解决方案5】:

        写个恐怖的代码来回答这个问题怎么样:http://www.codinghorror.com/blog/archives/000393.html

        “VM 大小:有多少进程不常用的内存已分页到磁盘。”

        【讨论】:

        • 实际上,请参阅 Mike Dimmick 对该帖子的评论:“您在 VM 大小上错了。这是此进程分配的所有私有(非共享)字节的总和,无论当前是否在物理内存中... "
        猜你喜欢
        • 1970-01-01
        • 2022-12-15
        • 1970-01-01
        • 2010-12-29
        • 2014-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        相关资源
        最近更新 更多