从调试 .net 应用程序的角度来看,我很难理解虚拟内存与物理内存泄漏之间的区别。
任何人都可以通过示例详细说明这个概念,我们怎么能只有一种类型的泄漏而没有其他类型的泄漏。
TIA
虚拟内存包括已标记为可供使用的进程地址空间范围。当您泄漏内存时,几乎总是涉及到虚拟内存,因为这是大多数程序处理的唯一概念。
通常只有在程序访问虚拟内存时才会消耗物理内存,操作系统必须为此提供物理内存来匹配。这很少独立于虚拟内存泄漏,因为它在操作系统的控制之下。
OTOH,程序可以通过强制某些虚拟内存页面保持映射到物理内存来对物理内存的分配进行更多控制(这种机制因操作系统而异)。在这种情况下,有缺陷的程序可能会泄漏物理内存。
更温和的物理内存泄漏形式是程序不断接触逻辑上不需要访问的虚拟内存页面。这将使此类页面保持热度,并阻碍操作系统保持工作集(物理映射页面集)较小的努力。