16、32 和 64 位系统中的内存限制

Mat*_*ton 22 memory operating-systems 64-bit 32-bit 16-bit

16、32、64位机器的理论内存限制如下:

  • 16 位 = 65,536 字节(64 千字节)

  • 32 位 = 4,294,967,296 字节(4 GB)

  • 64 位 = 18,446,744,073,709,551,616(16 艾字节)

我记得从 DOS/Windows 3.11 天开始,16 位内存可以分成段,这样 16 位机器可以访问比 64 KB 更大的内存量。

我有一台内存为 16GB 的机器,并且正在双启动 32 位操作系统和 64 位操作系统。我可以从 64 位访问所有 16GB,但在 32 位中只能访问 3.21GB。

所以,我的问题是:如果 16bit 操作系统由于内存分段允许大于 64KB 的内存访问,为什么 32bit 机器不遵循相同的原则?

Sco*_*ain 23

他们这样做,该系统称为物理地址扩展(PAE)。这是Windows 操作系统及其最大内存的列表,任何允许超过 4GB RAM 的 32 位系统都使用 PAE 访问内存(例如,Windows 2003 R2 Datacenter 32 位允许 128GB 内存)。


事实上,Windows 8的最低要求是需要一个支持 PAE 的 CPU 。


要解决有关为什么 32 位操作系统无法访问内存(如果存在)的“未询问”问题:许可。他们选择不允许 32 位操作系统的 RAM 超过 4GB,除非您为数据中心版本付费(这就是他们销售数据中心版本的原因,如果您需要那么多内存,您可能可以负担得起更多操作系统上的钱)。

  • 那是一个神话。由于 PAE 的开销很小。如果你不喜欢 PAE,你真的应该讨厌 x64,因为 x64 上的页表结构看起来就像 PAE,只是在顶部添加了另一个表级别,并在 PxE 中为 PFN 添加了更多位。 (3认同)

0xC*_*22L 15

我不会自己解释,而是让​​那些必须在 PAE 支持下维护内核的人用他迷人的方式说话,Linus Torvalds

还要记住,Windows 32 位版本中的 PAE 支持需要大量现金。XP 甚至无法正常使用满 4 GiB 的 RAM,因为 MS 选择在其上不启用 PAE 功能。与 Windows 2003 Server 密切相关的内核确实支持 PAE。但是,即使在那里,您的“标准版”也最多只能支持 4 GiB(但会绕过 BIOS 内存漏洞),而更昂贵的版本则最多可支持 64 GiB 的 RAM。这同样适用于32 位 Vista

但是,并非在所有情况下都是 Windows 强加的这种限制。如果是这样,启动支持 PAE 的 Linux 内核仍然可以使用完整的 4 GiB(或更多)。并非如此,一些硬件制造商选择在 BIOS 级别强加此限制,尽管 CPU 和芯片组将能够处理 PAE。


只是一个旁注:当前基于 x86 的 64 位处理器甚至都不能在物理上寻址整个 64 位地址空间(请参阅此问题和答案以供参考)。

  • 我知道 PAE 对于需要多于几场工作集的任何代码以及需要管理 2 场左右的多个任务的系统级代码来说都是一种麻烦,但除非单个应用程序需要超过 2我希望 PAE 是透明的。此外,我认为 PAE 也比全局使用 64 位指针更好,因为它需要 3 gig 的通用 RAM 加上大型磁盘缓存或临时存储驱动器。 (2认同)