虚拟内存的最大大小是多少

Whats the maximum size of Virtual memory

我对虚拟内存的概念不熟悉。 我想知道进程可以通过虚拟内存使用的最大 space 内存是多少? 是否可用 RAM + 可用交换 space ??

(这个问题已经有人问过了,但是大家对这个问题有不同的看法)

对于大多数系统,虚拟内存的最大大小由 MMU 支持的虚拟地址中的位数决定。

例如;对于典型的 64 位 80x86 CPU,虚拟地址为 64 位,但 MMU 仅支持最低的 48 位,因此虚拟地址大小为 1 << 48 = 256 TiB。其他一切(RAM 数量、交换 space 等)都无关紧要。

理论上,您可以(例如)通过在各处映射同一页 RAM 来填充整个虚拟地址 space;并且(对于 64 位 80x86)它只会花费 4 KiB 的 RAM(用于映射到任何地方的数据)加上另外 16 KiB 的 RAM(用于 MMU 自己的数据 - 页表等)。换句话说,区区 20 KiB 的物理 RAM 足以填充高达 256 TiB 的虚拟 space.

当然,出于实际目的,内核通常会保留一些虚拟地址 space(例如一半),因此进程只能使用剩余部分(例如 128 TiB);并且(对于现代 64 位 CPU)除非您在虚拟地址 space(即 silly/pointless)中的不同位置映射相同的数据,否则您很可能会 运行 out of things to put in a virtual address space before you 运行 out of virtual address space.

旧的 32 位 CPU 不是这种情况,其中虚拟地址 space 小得多(一个进程可能只能使用 4 GiB 总数中的 2 GiB space) 从 space.

中 运行 就容易多了