在 Windows 任务管理器的“性能”选项卡下,我在“物理内存”下看到了以下内容:
Total 3582
Cached 867
Available 846
Free 11
为什么这些数字加起来不等于总数?空闲内存和可用内存之间有什么区别?
答案1
来自微软任务管理器中可用字节的含义说明:
如果您不了解这个“可用内存”计数器实际上代表什么,那么您可能会发现它在您希望它接近零的时候却从未接近零。
任务管理器中的“可用内存”计数器实际上是以下三个内部内存列表的总和:
- 待机列表。
- 空闲列表。
- 零列表。
请参阅上面的文章来了解这些列表的含义。
答案2
最聪明的答案是“因为它们不应该加到总数”。:)
认真说:首先,您遗漏了“正在使用”的内存。“正在使用”的另一个术语是“在进程工作集、系统工作集之一或不可分页分配中”。简而言之,这是所有位于虚拟地址“下方”的 RAM,这些 RAM 可以被引用而不会导致页面错误。您可以将“正在使用”计算为“总计”-“可用”-“已修改”……只是您没有已修改页面列表的计数器。MPL 通常很小,除非您在没有页面文件的情况下运行。
正如 harrymc 所说,“可用”是三个列表的总和,这三个列表称为备用、空闲和零页面列表。空闲和零页面不包含与任何正在运行的进程相关的信息。但是,备用页面包含进程丢失的页面,这些页面可能很快会被这些进程再次需要(它们将通过一种“软页面错误”被带入这些进程) - 但是,如果需要将某些备用页面用于其他用途,则可以立即进行,因为备用页面中的任何数据在磁盘上也可用,并且可以在必要时从磁盘读回。
因此,您马上就会发现,如果您尝试将“可用”和“免费”加在一起,那是错误的......因为“免费”已经是“可用”的一部分,所以您计算了两次“免费”。
(为了让生活更有趣,任务管理器报告的“空闲”实际上包括空闲和零页面列表。)
不过,造成这种差异的主要原因通常是“缓存”计数器。在 Windows 7 中,“缓存”包括文件系统缓存工作集(不是 SuperFetch,这是不同的东西)和备用页面列表。因此,如果您尝试将“可用”和“缓存”加在一起,那么您就对备用列表进行了两次计数,这当然会让您误入歧途。
在 Windows 8 和 Windows 10 中,他们将 MPL 算作任务管理器显示上的“缓存”的一部分,这进一步混淆了事情。