关于操作系统:Windows任务管理器中的“ VM Size”是什么意思?

关于操作系统:Windows任务管理器中的“ VM Size”是什么意思?

What does “VM Size” mean in the Windows Task Manager?

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

[a way to make the program] think it
has a large range of contiguous
addresses; but in reality the parts it
is currently using are scattered
around RAM, and the inactive parts are
saved in a disk file. (Wikipedia)

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

但是在任务管理器中,WM大小在许多情况下小于"内存使用量",后者应为进程使用的RAM数量。 因此,我想WM尺寸还有其他含义吗?


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

另请参阅Windows内存管理入门指南或"提交费用Wikipedia"一文。

对于像这样的开发人员而言,我建议安装SysInternals Process Explorer并使用它而不是默认的Task Manager。此值在其中称为"专用字节"。


VM大小的正确答案是什么?

  • 在编码恐怖中

    How much of the processes' less frequently used memory has been paged to disk.

  • 评论编码恐怖

    You're wrong on VM Size. It's the total of all private (not shared) bytes allocated by this process, whether currently in physical memory or not. It's a better value for tracking whether you have a memory leak than 'Mem Usage'. The same value is available in Performance Monitor as 'Process: Private Bytes'.

  • 在MSDN中

    Virtual Memory Size :
    The amount of virtual memory, or address space, committed to a process.

我把什么弄乱了。


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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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映射只有一个副本,而不管有多少进程使用它。


编码恐怖帖子如何回答这个问题:http://www.codinghorror.com/blog/archives/000393.html

" VM大小:已将多少个进程的不经常使用的内存分页到磁盘上。"


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


推荐阅读