Windows对于物理内存的支持,要受到诸如硬件限制、许可、操作系统数据结构,以及驱动程序的兼容性等方面的综合影响。MSDN网站的Memory Limits for Windows Releases文章对不同Windows版本、以及同一个版本的不同SKU的限制进行介绍。
我们可以查看所有Windows版本的不同SKU的物理内存支持许可。例如,32位 Windows Server 2008标准版仅支持4GB,而32位Windows Server 2008数据中心版支持64GB。类似的,64位Windows Server 2008标准版支持32GB,而64位32位Windows Server 2008数据中心版支持2TB。目前来说,并没有多少系统拥有2TB内存,不过Windows Server性能产品组知道有两台服务器拥有那么多的内存,其中一台位于某地的实验室。该服务器的任务管理器如下图所示:
32位的最大限制是128GB,Windows Server 2003数据中心版可以支持,这是因为在大内存的系统上,内存管理器用来追踪物理内存的结构,需要消耗更多系统虚拟地址空间。内存管理器把每个内存页的追踪数据保存在叫做PFN数据库的数组中,而且考虑到性能因素,会把整个PFN数据库映射到虚拟内存中。因为它用28字节的数据结构来代表每个内存页,128GB系统的PFN数据库需要将近930MB的空间。32位Windows拥有4GB的虚拟地址空间,由硬件所定义,默认划分为两半,其中一半供用户模式进程(例如Notepad)所使用,另一半供系统所使用。因此980MB的容量就要占据将近一半的系统虚拟地址空间(共2GB),只剩下约1GB 空间可以用来映射内核、驱动程序、系统缓存和其他系统数据结构:
内存限制
64位Windows客户端,不同SKU的内存支持也有所不同,Windows XP Starter版的内存支持最低,仅512MB,而Windows Vista旗舰版的内存支持最高,可达128GB。但是所有版本的32位Windows客户端SKU,包括Windows Vista、Windows XP和Windows 2000 Professional,最大支持4GB物理内存。标准的X86内存管理模式,最大可以支持4GB的物理地址访问。在早期,并不需要考虑在客户端提供超过4GB的支持,因为当时很少有计算机配备那么高的内存,哪怕是服务器。
但是在Windows XP SP2开发的过程中,已经可以预见客户端计算机将会配备超过4GB的内存,所以Windows产品组对超过4GB的Windows XP计算机进行大量的测试。Windows XP SP2还支持物理地址扩展(PAE)功能,该功能本来是为了在硬件上实现非执行(NX)保护,因为这是数据执行保护(DEP)的必要条件,但是该功能还可以支持超过4GB的内存。