Increasingly I'm running into these sort of questions in technical communities, to the point where its happening several times a day. Questions like:

"I've 4GB of RAM, but Windows only shows 3GB" and "My PC's got 8GB of RAM but it only shows 3.1GB" etc

This stems from the fact that a 32-bit computer (sometimes referred to as x86) only supports a 4GB (2^32) address space. So why doesn't 4GB of RAM show up? Because the computer also needs to address other hardware in the computer like the CPU, motherboard, graphics card etc these all need addresses so the computer can access them.

This is what the address space on a 32-bit computer with say 2GB of RAM "looks" like using my dodgy street/house analogy. The first row of houses are the first 1GB of addresses, and so on.

Say the red house is where the CPU lives, the sound card lives in the yellow house, and the graphics card in say the orange house, these are all occupying addresses within the 4GB limit. The green houses are all filled with RAM. And there are some empty houses shown in white.

So what happens if we try sticking another 2GB of RAM in the system to bring the total RAM to 4GB?

Uhh ohh... All of the houses are full up, and we've got some RAM left over. This RAM is unaddressable, and as such the system has no address by which to communicate with it, and it goes unused.

This is why people's computers are only seeing about 3GB of RAM (that number varies due to different hardware, some needs more address space, some needs less). Despite the address space being 32-bit, the rest of the hardware needs its addresses and so the extra RAM is pushed out of the address space.

The solution

There is no easy solution, if you want your computer to use more than around 3GB of RAM. You have one option.

Ensure your hardware is 64-bit compatible, and use 64-bit Windows.

The mainstream version of 64-bit systems were mainly developed by AMD (dubbed AMD64, x86-64, often shortened to just x64), which debuted in their Athlon 64 chips. Intel later adopted the same technology in their own chips, for the last couple of years almost all CPUs sold are capable of running in both 32-bit and 64-bit modes. In 2005 Microsoft released versions of Windows XP and Windows Server 2003 that had been rewritten to support these 64-bit CPUs, and along with the 32-bit versions of Windows Vista and Windows Server 2008 Microsoft also ship 64-bit versions.

64-bit has a significantly larger address space, 2^64 is 18,446,744,073,709,551,616 bytes, that's about 16 exabytes. About 17 billion GB of address space.

Our street/house analogy breaks down here, and there's no way I can draw all the houses, but you can see the left over 1GB of RAM now gets an address.

Recent changes, and putting 64-bit to work

Microsoft made some changes in Windows Vista SP1 so that the system properties will display the installed RAM, instead of the usable RAM. This no doubt came at the request of computer manufacturers who were getting too many calls to their help desks about this issue. Instead of doing the obvious thing - which is using Windows Vista x64 when selling computers with 4GB or more RAM, they'd rather cover the problem up, it's not like the 64-bit version is anymore expensive to buy off Microsoft than 32-bit.

You can still check what RAM is usable by opening the Task Manager and looking at physical memory under the performance tab.

It is only a matter of time until computer manufacturers have to get their act together on this - in a couple of years when you can buy computers with 8GB of RAM they won't be able to get away with 5GB going unused and they'll have to start moving 64-bit versions of Windows in large quantities.

Using 64-bit versions of Windows does have its trade offs, the hardware needs to support 64-bit by supplying 64-bit compatible drivers, and some motherboards need an option to be changed in the BIOS to support 64-bit. There are also some software compatibility changes, although Windows XP/Vista x64 is compatible with 32-bit software, applications that dig in deep to the system like anti-virus will probably need to be replaced, in addition 16-bit applications from the DOS/Windows 3 era are no longer compatible.

A few interests tidbits

A 1 exabyte hard drive would cost somewhere in the region of $200 million to manufacture. I don't know how big it would be - but it would be pretty huge.

All the words spoken by every human through history would weigh in at about 5 exabytes.

Yes, a 16EB address space is pretty big, and we won't need to move to 128-bit for address space reasons anytime soon (and yes in 30 years I'll probably regret saying that).