IT之家 9 月 13 日消息,据外媒 WindowsLatest 报道,不少用户认为,32 位 Windows 最多只能使用 4GB 内存,是因为 32 位地址只能表示 2³² 种组合,因此地址空间上限就是 4GB。这个说法虽然听起来合理,但如果回顾 Windows XP 的历史,就会发现实际情况并没有这么简单。
微软实际上曾提供过让 32 位 x86 系统访问 4GB 以上物理内存的机制,当年英特尔曾联合微软为 Pentium Pro 处理器引入一项名为 PAE(Physical Address Extension,即“物理地址扩展”,简称 PAE)的技术,在 Windows Server 部分版本中,可以让 32 位 x86 处理器使用 36 位物理地址,而不是传统的 32 位物理地址,从而访问超过 4GB 的物理内存。

不过,面向普通消费者的 Windows 版本却主动限制了这一能力。原因并非处理器做不到,而是微软担心部分存在缺陷的硬件驱动在访问 4GB 以上物理内存时导致系统崩溃。
具体来看,PAE 并不会改变 32 位程序本身的虚拟地址空间。每个 32 位程序仍然拥有 4GB 虚拟地址空间,而普通程序通常只能使用其中 2GB,其余空间由系统保留。PAE 改变的是操作系统在后台管理物理内存的能力。根据微软相关文档,Windows Server 2003 SP1 Enterprise 最高可以支持 64GB 物理内存,而 Datacenter 版本最高可支持 128GB。
不过,在启用 PAE 并让系统分配 4GB 以上的物理内存后,驱动程序就不能再假设物理地址一定能够用 32 位表示。如果驱动获取物理地址后直接丢弃高位,硬件最终就可能被指向错误的内存位置。同样,一些代码如果直接截断地址,也会丢失其中的信息;而负责 DMA 传输的驱动还必须严格区分虚拟地址和物理地址,早期部分驱动并没有做好这些处理,因此微软决心在面向普通消费者的 Windows 版本中限制了相应能力。

微软在相关支持文档中也指出,启用 PAE 后通常只需要对设备驱动进行一些小规模修改,但这些修改可能很难处理,因为未使用 PAE 时,驱动程序可以错误地认为物理地址和 32 位虚拟地址的限制是一致的,而 PAE 会使这一假设失效。
举例来说,如果驱动程序拿到一个需要超过 32 位才能表示的物理地址,却直接将其截断,那么 Windows 认为数据写入了一个位置,硬件实际却可能将数据写入另一个位置。一旦错误的数据覆盖了其他内存区域,就可能造成内存损坏甚至系统崩溃。
当年的消费级 PC 尤其容易遇到这一问题。用户可能安装打印机、扫描仪、摄像头、声卡以及各种扩展设备,而这些硬件对应的驱动程序并不一定经过 PAE 环境下的充分测试。
因此,在 Windows XP SP2 和 Windows Server 2003 SP1 Standard Edition 中,微软对硬件抽象层进行了调整,将物理地址空间限制在 4GB 以内,从而降低未经测试的驱动程序在 PAE 环境下破坏内存的风险。
这也解释了为什么 Windows Server 和面向普通用户的 Windows 在内存支持策略上存在明显区别。服务器通常运行在经过严格控制的硬件环境中,管理员会尽量使用经过验证的驱动程序,而普通消费者则可能随时安装各种第三方硬件及驱动。
因此,微软当年限制客户端版 Windows 使用 4GB 以上物理内存,并不是因为 32 位处理器从技术上无法访问更多内存,而是在硬件驱动生态并不可靠的情况下,为了稳定性主动做出的取舍。
随着 64 位处理器和操作系统逐渐普及,这一问题最终失去了现实意义。32 位处理器和 32 位 Windows 的市场也持续萎缩,微软最终结束了 32 位 Windows 版本的生产,并逐渐将 PC 生态全面转向 64 位。
至于“微软故意限制普通版 Windows 内存,是为了逼用户购买昂贵的 Windows Server”这一说法,Chen 也曾否认。不过,从当年的价格来看,Windows Server 2003 能够支持超过 4GB 内存的 Enterprise 版本售价高达 3,999 美元(IT之家注:现汇率约合 26,895 元人民币),普通消费者显然也没有多少理由为了内存支持而选择服务器版。
如今,微软又开始重新关注 Windows 11 的内存占用问题。随着操作系统和第三方应用不断增加功能,8GB 内存设备的运行压力越来越明显,微软近期已经表示将进一步优化 Windows 11,使其在 8GB 内存设备上运行得更加顺畅。某种程度上,这再次说明了一个长期存在的软件规律:当硬件资源充足时,软件往往会自然地消耗更多资源;而当硬件资源受到限制时,开发者反而更容易被迫关注效率。