Aha, a damn fine question.
It is because of a CPU instruction (or set thereof) known as PAE-36.
It permits 36 bit addressing on 32 bit systems by paging huge chunks in/out of the 'active' memory pool.
The OS will hide this from applications, but it prevents on application (process) allocating a contiguous 6+ GB chunk of memory, as it would need to span multiple paged 'pools'. (Most Win32 processes can only use 2 GB, some using /3GB in BOOT.INI and special coding technique can use up to 3 GB per process).
Some applications will load more than one process into memory though, and use inter process communication to work around it.
PAE-36 has existed since the Pentium Pro (considered the 6th generation of Intel CPUs), PAE-36 is also used with the NX/XD bit to mask areas of memory as
NO E
XECUTE / E
XECUTE
DISABLE on systems with 4 GB or less or memory in Windows XP (Service Pack 2 or higher required, however a CPU does not need the NX/XD bit for DEP to work, as PAE-36 offers a software workaround to do the same job).
NEW:
http://www.microsoft.com/whdc/system/platform/server/PAE/pae_os.mspx
http://search.microsoft.com/results.aspx?mkt=en-US&setlang=en-US&q=PAE+36
http://search.microsoft.com/results.aspx?q=%2F3GB+BOOT.INI&l=1&mkt=en-US&FORM=QBME1
http://search.microsoft.com/results.aspx?q=AWE&l=1&mkt=en-US&FORM=QBME1
http://search.microsoft.com/results.aspx?q=%2FNoExecute+boot.ini&l=1&mkt=en-US&FORM=QBME1
http://search.microsoft.com/results.aspx?q=Data+Execution+Prevention+&l=1&mkt=en-US&FORM=QBME1
- Anyone training IT people should bookmark the above links, Or if you are want to become a Software Developer for a 'certain grade' of software (although x64 has a flat 512 GB to 1024 GB [1 TB] memory model - it is still worth reading).
- It is pretty cool stuff, but PAE-36 has been around since the early days of Windows NT 4.0 Server, and is why many '32 bit Kernels', such as Novell Netware 6.5 SP3, can use pools of memory that span 36 bits of address space normally (but not with a flat memory model).
Past 32 GB PAE-36 is pretty inefficient though, despite the fact it can handle 64 GB 'in theory' w/o major performance issues arising.
PAE-36 is also the reason why Service Pack 2 enables a software only version of No Execute / Execute Disable
(Data Execution Prevention) using /NoExecute in BOOT.INI
on systems with CPUs that lack the NX/XD bit. (All thanks to an underused instruction addition, added back in the Pentium Pro era).
- Hows that for innovation ?
Riveting stuff I say