我想知道提交大小(在任务管理器中可见)和虚拟大小(在SysInternals中可见)之间的确切区别 Process Explorer )。
Process Explorer 中的虚拟大小参数看起来更准确地指示了进程的总虚拟内存使用情况。但是提交大小总是小于虚拟大小,我想它不包括进程使用的所有虚拟内存。我希望有人解释这些参数中包含的内容。
答案 0 :(得分:52)
可以保留,提交,首次访问内存,并成为工作集的一部分。当内存保留时,一部分地址空间被搁置,没有其他事情发生。
当内存提交时,操作系统保证相应的页面 原则上可以存在于物理RAM或页面文件中。换句话说,它计入系统总可用页面的硬限制,并且正式创建页面。也就是说,它会创建页面并假装它们存在(实际上它们还不存在)。
首次访问内存时,会创建正式存在的页面,以便真正存在。向进程提供零页面,或者从映射将数据读入页面。页面将移动到流程的工作集中(但不一定会永久保留在那里)。
每个正在运行的进程都有许多页面,这些页面在RAM中是在事实上和逻辑上,即这些页面存在,并且它们也“正式”存在。这是流程的工作集。
此外,每个正在运行的进程都有在RAM中事实上的页面,但不再正式存在于RAM中。它们可能位于所谓的“备用列表”或缓冲区缓存的一部分,或者不同的东西。当访问它们时,OS可以简单地将它们再次移动到工作集中
最后,每个进程都有完全不在RAM中的页面(在交换时或者它们还不存在)。
虚拟大小包含进程保留的所有页面的大小。
提交大小仅包含已提交的网页。
也就是说,用外行术语来说,“虚拟大小”几乎是你自己的问题,只受地址空间大小的限制,而“提交大小”是每个人的问题,因为它消耗了全球有限的资源(RAM加上交换)。因此影响其他进程。
答案 1 :(得分:10)
提交大小是进程的页面文件中保留的空间量。当需要换出页面以在其他进程的RAM中腾出空间时使用。
是的,虚拟内存大小会更大,因为它包含页面文件不支持的页面。至少EXE中的代码和资源部分以及未重定位的DLL。必要时,可以简单地丢弃这些页面并从文件中重新加载。所有操作系统DLL都适合此类别。此外,进程使用的任何内存映射文件。 SysInternals的VMMap实用程序可以提供洞察力。
答案 2 :(得分:2)
虚拟大小是进程虚拟地址空间的大小。
分配内存时,您可以请求一个地址范围,而无需实际提交内存。在使用第二个分配调用来提交它们之前,这些地址不指向物理内存。
详细了解VirtualAlloc。 Linux具有执行相同操作的mmap函数。