我知道硬件容量为 2^48 位,并且我知道内核通常对应用程序内存约束没有很多本机限制,但是应用程序可以使用的内存上限是否存在除了 2^48 之外,一般还消耗多少,因为这是 DIMM 插槽上可用的通道数?
作为参考,Redmond 在大多数服务器产品上将其产品限制为 ~2TB。
答案1
根据定义(至少根据通用定义),64 位进程只能看到 2 64字节的内存。实际上,大多数操作系统将每个进程限制为略小于可用地址空间,以便内核可以操作 64 个值,这些值可以是指向内核内存、进程内存或设备内存的指针。 4EB 或 8EB 限制很常见。
在此之前,您可能会遇到依赖于体系结构的限制。特别是,进程的内存映射必须适合机器的内存映射内存管理单元,而硬件往往只具有必要的位数。 MMU 具有最多四级页表,Linux(除其他外)可以支持所有四级:胚胎植入前诊断(页面全局目录)列出 PUD(页面上层目录) 列出 PMD(页面中层目录) 列出 PTE(页表条目)。由于每一级间接寻址都是对大多数指针取消引用采取的又一个步骤,systems .页的大小通常为 4kB(2 1242 个可寻址字节,但是大多数 64 位体系结构都可以配置为更大的页表,因此很难对您的页表大小给出任何通用答案。可以去。
请注意,每个进程的地址限制与计算机中可以有多少物理内存无关。例如,PC 中 DIMM 插槽上可用的通道数量是该 PC 中可以拥有的 RAM 数量的理论上限制(尽管 CPU 内存总线的宽度通常是限制因素)。它与进程可以消耗多少内存或多少地址空间无关(内存可以被换出,或者在一个进程的多个节点之间共享)NUMA多处理器机器)。
答案2
理论最大值受限于内存分段在CPU上使用,例如X86-64使用绝对机制(段从0开始,容量为2 64),但操作系统本身可以对进程大小强制人为限制。