使用 32 位 x86 PAE Linux 内核时,即使系统有 GiBs 更多可用内存,单个应用程序也不能分配超过 2 GiBs,这是真的吗? 64 位 x86 Linux 内核是否放宽了此限制?
答案1
32 位进程具有 32 位地址空间,根据定义:“32 位”意味着进程中的内存地址是 32 位宽,如果有 2 32 个不同的地址,则最多可以寻址 2 32 个字节( 4GB)。 32位Linux内核只能执行32位进程。根据内核编译选项,每个进程只能分配 1GB、2GB 或 3GB 内存(其余部分在处理系统调用时为内核保留)。这是虚拟内存量,与 RAM、交换和映射文件之间的任何细分无关。
64 位内核可以运行 64 位进程以及 32 位进程。原则上,一个64位进程最多可以寻址2个64字节(16EB)。上x86_64架构,部分原因是x86_64的设计内存管理单元目前,每个进程的地址空间限制为 128TB。
答案2
32 位进程最多只能分配 1、2、3 或大约 4GB,具体取决于构建 32 位内核时选择的内存分割。 64 位内核上的 32 位进程可以分配大约 4GB。 64 位 x86-64 内核上的 64 位进程可以分配高达 128TiB。