Memory is getting cheaper every day. This is one reason why more and more people are equipping their PCs with 4GB RAM or more. Modern desktops often support up to 8GB. So it happens quite often these days that a proud owner of a new a PC wonders why Vista only reports about 3GB RAM even though he bought 4GB. I have been asked this question by several people within the last weeks. Some of them were IT pros, so I thought I should post something about it here. The things I say in this post mostly apply to Windows XP as well.
Latest posts by Michael Pietroforte (see all)
- Author and member of the year 2019 – Why DevOps still doesn't rule the IT world - Wed, Jan 1 2020
- Results of the 4sysops member and author competition in 2018 - Tue, Jan 8 2019
- Why Microsoft is using Windows customers as guinea pigs - Reply to Tim Warner - Tue, Dec 18 2018
In theory, a 32-bit operating system should be able to support 232 bytes = 4GB memory. Thus the first reaction usually is that the memory chips or with the mainboard has a hardware defect. Unfortunately, that's not the case. Vista can indeed address 4GB of memory. However, the maximum amount of RAM that can be used by the system and applications is 3.12 GB.
The cause for this is the so-called memory-mapped I/O (MMIO). Some devices need a dedicated space in memory. A typical example is a video card that utilizes the system memory. Now, you might object that your video card has its own memory and you didn’t install any additional devices that could occupy so much RAM.
Well, for compatibility reasons Vista reserves memory for devices even if they don’t exist in your computer. That means that if you have 4GB RAM in your computer and Vista displays only 3.12 GB available memory, about 1GB is indeed not used by the OS. You might as well remove it. That is quite strange, isn’t it? I am not a system programmer, but for me that seems to be a design error, probably one that is very old.
There is a KB article about this issue which offers a “workaround” though. All you have to do is to install Vista x64 instead of Vista x86. Vista’s 64-bit edition is indeed capable of handling more memory. Note that it is not possible to upgrade Vista x86 to Vista x64. That’s why I find it somehow funny that they sell this solution as a workaround. I will post some articles about the Vista x86 vs. Vista x64 issue very soon. So if you think of going this route, you might as well wait some more days before you make up your mind. In the meantime you can read a former article about the Vista x86 vs. Vista x64 issue.
You might think that Microsoft found an even better workaround, though. It is Service Pack 1. I have read about this before, but today I tried it myself. I installed Vista on a brand new HP PC with 4GB RAM. As expected Vista’s System Properties only displayed about 3 GB RAM. After I installed SP1, the amount of RAM was increased as if by a miracle (see screenshots) to 4GB. You might think that Microsoft corrected this design error, but unfortunately that is not the case.
All they did is to change what is displayed in the System Properties. I guess this problem kept the support personal of PC vendors around the globe busy. And since RAM is getting cheaper every day, the situation would have become worse soon. So Microsoft decided to solve this issue the easy way. System Properties and also the Welcome Center, which is the first place you go to check the amount of memory, simply displays 4GB and so everyone is happy now.
The only problem is that those who are unaware of Vista’s 3.12 GB limit just wasted their money. If you really want to know how much memory Vista actually uses, you have to use Vista’s System Information tool. To do so, go to Vista’s Start prompt and type Msinfo32. The new System Information tool in Vista SP1 distinguishes between “Installed Physical Memory (RAM)” and “Total Physical Memory”. The latter one is the amount of memory you can really use, and the first one indicates how much money you just have wasted if you put 4GB in your PC. You can read more about this issue in this KB article.