虚拟内存和提交费用

虚拟内存和提交费用

我读了很多关于提交费用,有些东西仍然困扰着我。在我的 Mac 上(可能在 Linux 上也是如此),VM 大小和提交内存(Windows)之间的关系是什么。经过一些测试后,我想我完全理解了提交,但在 Windows 中,虚拟内存的数量似乎从未超过交换空间 + RAM。在 OSX(和 Linux)中,VM 大小似乎几乎超过了我的硬盘大小!我猜它要么包含不止一次的共享内存,要么包含已分配但未触及或写入内存。假设我创建了一个 malloc(2gb)(显然不是这样),与实际写入整个 2gb 不同。

所以这让我想到一个问题,在 OSX 和 Linux 中,VM 大小究竟是如何衡量的。例如,它是所有 malloc 调用的总和(或可能的 VM 总量,包括 64 位机器上每个进程的实际 4gb),与 Windows 上的提交(限制、峰值、使用)相比如何?Windows 是否不允许分配超过交换 + 内存限制的内存,而 OSX 和 Linux 却允许,为什么?

在下面的图片中,您可以看到 Windows 中的交换 + ram 等于提交 (2gb)。在 OSX 中,我的 VM 大小超过 200gb,硬盘约为 200gb。

Windows 任务管理器显示最大提交量为 2gb(我认为)

Windows 控制面板显示 1024mb 1(gb) 交换加 1(gb) 内存

osx 进程管理器显示虚拟机大小超过 200gb

答案1

VM 大小是进程使用的总地址空间。两种操作系统都不允许你使用以下方式超出可用 RAM+交换空间:支持VM,但您可以使用无备份 VM。本质上,VM 大小(尤其是在 64 位操作系统上)是无意义的测量。无备份虚拟内存(不需要 RAM 或交换的虚拟内存)本质上是免费的,因此没有理由关心使用了多少。

在 64 位操作系统上,您可以以只读方式打开一个 2GB 的文件,并将整个文件映射到您的进程地址空间中。这会“消耗” 2GB 的 VM,但实际上根本不需要任何重要资源。而且由于它是只读映射,因此它永远不需要交换。

提交费用衡量备份虚拟内存,即最终可能导致消耗物理内存或分页/交换空间的虚拟内存。操作系统不知道最终需要备份多少内存,因此通常不允许分配超过 RAM+交换空间的内存。(据我所知,Windows 和 OSX 都不允许备份虚拟内存的过度使用。Linux 允许。)

相关内容