32bit操作系统,32bit处理器,有着32bit寻址能力,可以访问2^32 = 4G物理地址,于是拥有识别4GB内存的能力,这似乎是完全顺理成章的事情。然而其中有一个关键,什么是物理地址?物理地址就是物理内存的地址?非也。物理地址是指处理器和系统内存之间所用到地址,我们可以简单理解成是CPU“极方便访问的地址”。这个地址并非物理内存独享,尽管通常它基本都会与物理地址重叠,但也可以根据需要被其他设备占用,使得物理内存实际上只能够占用这4GB地址中的一部分。

认真看看上面这个P45芯片组的系统地址区域图。图中的方块代表的是不同区域的“地址”,这些地址囊括了一台电脑中所有能和操作系统以及芯片组关联的设备地址,而不仅仅是“物理内存地址”。同样的,那个4G的红线代表的是第4G个Byte的地址,并不是4GB物理内存的分界线,尽管内存控制器很多时候确实会让它们重叠在一起。P45芯片组是一款支持36bit寻址的产品,即可以支持64GB地址,但为了去迎合操作系统以及各种软件,因此需要保证系统运转所必须的所有设备地址都可以在4GB范围内找到,否则会给硬件32bit驱动程序的制作带来很多麻烦,对驱动程序兼容性造成极大程度的影响。很显然,让一个系统正常运行并不仅仅包括内存,还要包括各种I/O设备等。在4GB的寻址范围内,物理内存实际上只占据了一块,就是那个被称为Main Memory Address Range的区域(图中绿色框)。安装4GB以下内存的话,Windows的任务管理器会确认1MB至TOLUD寄存器数值作为系统可用的物理内存(无板载显卡占用)。TOLUD全称是Top of Low Usable Dram,这个16bit寄存器由BIOS赋予一个适当的数值,其含义是4GB地址内的可用物理内存地址顶端。如果安装2GB内存,那么TOLUD的数值就是7FFFFFFFh,也就是16进制的2GB(加上0地址),任务管理器一般会显示2046MB(见小贴士)。既然内存并不能占据整个4GB地址,那么其他地址主要被谁占据了呢?
小贴士:相信不少非4GB用户会发现自己的内存同样被偷吃了几MB,比如2GB内存用户通常在设备管理器中只能看到2047MB或者2046MB内存等等。这是因为还有两块地址范围被占据,这两个区域分别是Legacy Address Range和TSEG,他们会使用一部分内存(比如加载系统BIOS)。由于这两个区域都处于TOLUD以下的地址范围内,包含了BIOS等底层部件的Legacy Address Range更是固定占据00000000h至000FFFFFh的1MB最底层地址空间,所以无论系统安装了多少内存,Windows任务管理器显示的数值都会受到影响。

上面的图中展示了00000000h至FFFFFFFFh共4GB地址的详细分配(上图中方块大小于占用地址多少无关),4GB物理内存本身会自然排布其上,但会有一些优先级更高的分派来争夺物理地址空间,使得真正留下的物理内存只在Main Memory区域,而其他部分通常会占据几MB最多十几MB的地址空间,但其中有一个地址大户:PCI Memory Address Range(PCI Memory Range)。