I explain this several times a day at work. In a futile attempt to cut back on the number of phone calls about this particular issue I have decided to make a blog post about it. That way, there will be one more page for Google and other search engines to direct people to when they are trying to find out why their brand new Vista computer only reads 3.5GB instead of 4GB.
First off, the limitation is in the operating system (OS) of the computer, not in the motherboard or BIOS. That means that if your motherboard has four slots that can take 1GB each, you can install four 1GB memory modules without any complications at all, and the BIOS will correctly report that all four of them are installed and working (assuming of course that’s the case).
However, if you have a 32-bit OS, it will report only 3GB or 3.5GB (or somewhere in between). In extreme cases, it may even be as low as 2.5GB! This does not mean that your new RAM isn’t working, and a quick peek in the BIOS will verify that. It has to do with the fact that a 32-bit operating system caps out at 4GB of total system memory.
A brief tangent here: If you don’t know if you have a 32-bit OS, look in your System Preferences if you have Windows XP, and in System in Control Panel if you have Vista. If it doesn’t say “64-bit” somewhere in there, you have a 32-bit OS installed.
The problem that you are going to run into if you want to max out the amount of memory on your 32-bit OS computer, is that 32-bit allows for a total of 4GB of addressable system memory. That does not mean 4GB of physical RAM, it means everything. Now, some of that everything is paging files, the memory on the video card, integrated networking… there are all sorts of functions that need memory to work, and they count towards that 4GB system total.
When you boot the computer it sets aside a section of the 4GB for the things I just mentioned, and stashes that amount away in the top of the 4GB. (This is very over-simplified, since I didn’t feel like typing three additional paragraphs about address space.) If your computer wants a total of 1GB held in reserve, and you have 2GB of physical memory installed, you will see the full 2GB reported by your 32-bit OS, because you’re not totaling 4GB or more. However, if you install 4GB of RAM you will not see the full amount reported. Your computer has already reserved 1GB for itself, and because a 32-bit OS know there can never be more than 4GB in total, the largest amount of RAM it can imagine is 3GB, so that is what it will report to you as having available for use.
In Service Pack 1 for Vista, Microsoft addressed the matter, and made the 32-bit versions of their new OS report the amount that is installed in the memory slots. However, this is a cosmetic change, and does not change the fundamental architecture of the 32-bit OS, and that in turn means that although Vista 32-bit tells you it has 4GB of RAM, it will not be able to use the full 4GB. It will use whatever is left over once the non-OS functions have been given their share.
Hopefully this clears things up a little bit. Now, if only I could get my customers to use Google and understand the search results…