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.
- Poll: How reliable are ChatGPT and Bing Chat? - Tue, May 23 2023
- Pip install Boto3 - Thu, Mar 24 2022
- Install Boto3 (AWS SDK for Python) in Visual Studio Code (VS Code) on Windows - Wed, Feb 23 2022
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.
Subscribe to 4sysops newsletter!
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.
Want to write for 4sysops? We are looking for new authors.
When Vista 32bit or any other 32bit OS does support 4GB or more of RAM it will undoubtedly result in a drop in performance.
Most of my metaphores serve to confuse so here you go – get confused – It’s like owning a Pool table in an apartment that is big enough for a pool table. Then adding a loft extension and suggesting you can now own a snooker table. Indeed if you chop the snooker table in half and put half of it in the loft you can have it or you could fill the room with it and leave no space to wander round and take your shot. However its not so hard to stick a cushion down the cut edges and make two smaller tables. Now you can use your snooker table for two games of pool.
IN THE MACHINE
The fact is a 32bit OS can only access 4 GB of memory space. Included in this space is everything. When you read some data from the disc it gets stored in a space with an address – that address is in the list of 4billion available addresses. The same thing is true if you have a 512mb graphics card 512million of those addresses must be taken out of your RAM addresses and reserved just to get data onto the screen. Every time you press a key on your keyboard, receive some data over the network, send an image over USB to your printer or make a sound that information is transferred to and from the devices via those addressed locations. The Chipset is responsible for organising this mapping. It maps the physical addresses into a virtual 4GB space.
TOO CLEVER TO TRY
It could try and be clever and say when I want to display stuff on the screen map it to the graphics card and when I want my app to use it map it to my RAM chips. If the app that is in that RAM area wants to write to the screen you can see life will become very tricky and the whole process to continue the metaphor would involve running up the stairs and launching the balls at the same velocity on the other half of the table.
DUAL CHANNEL PAYBACK
However there is an upside – you probably haven’t wasted you cache on that extra memory. The reason for this is that if you install pairs e.g. 2x2gb of the same type the system can access both pairs simultaneously double the speed memory can be accessed. If you got to 4 GB with 1 x 2 GB and 1 x 1 GB then you probably won’t see in improvement and dual channel memory access can’t be enabled across that 1 x 2 GB chip. The PTA switches try to map the 32bit code in a 36bit address space because it’s really 64bit hardware.
VMWARE ALL YOUR MEMORY IN BITE SIZES
A last resort could involve running something like 64bot Linux with 64bit VMware host. This will allow multiple 32bit Virtual machines and get you all of your memory. Of course at a cost of multiple OS’s running and hardware abstraction that means you won’t get the best out of your cool kit.
THE EXCEPTION TO PROVE THE RULE
Lastly more advanced versions of applications like SQL server are written to optimised use of those 32/36 bit memory extensions. But there are very few applications that have gone to the effort to make that work.
I have written this based on my very fuzzy memory but I think it describes why you should stop waiting for a 32bit OS to use all 4 GB or more of your RAM. If you want to find out more you should look at how Virtual Memory works, and How page faults trigger memory management and what Context switching means.
I am just on the verge of buying a new laptop with Vista Business pre-installed.
I WAS thinking of upgrading the standard 2GB memory to 4GB, but I now know that would be a waste of money.
If I only upgrade to 3GB, would Vista then set aside a GB of that, leaving me with just over 2GB usable?
If that were the case, perhaps I would be better off buying 4Gb – 1 for Vista and 3 for me.
err. anyone heard of windows 2000?
the server version (32bit thankyou very much) had a little thing called 36bit memory addressing. voila!!! we have 128GB of ram to play with
now, microsoft; get coding and give me more than 3.5GB ram, or give me decent support for X64 windows xp/vista.
i m using windows vista 64 bit service pack 1 . i installed 4 gb of ram but its showing same as 3.12gb . So its not the matter of 32 bit or 64 bit , moreover service pack 1 didnt able to slove this problem. So if u guys a have any idea pls post or mail me at email@example.com
I’m also having the same problem. I installed 4GB, It is perfectly showingin BIOS. But When it comes to Vista, it is using only 3GB. I’m using 32bit OS.
Any suggestion is appreciated..
Without going into BIOS or Windows issues (which others have addressed), I’d like to point out that:
– On some motherboards it may be better to use 4 GB instead of 2 GB or 3 GB because of memory interleaving improving performance. I have a SuperMicro MB that supports 4 1 GB DDR2 modules, and prefers them in pairs for interleaving. So even if I don’t use 4 GB, I get improved performance by installing DIMMs in pairs.
I think this post is kinda old, but I am running Windows 7 Beta 64bit and I am only seeing 3gb of ram used. It does say that I have 4, but I tried to run virtual PC and it said I did not have enough. I have 4gb. System was using 2gb and vm was set for 1gb????????????
I am updating my bios right now, but I will repost if thatfixes it. I think that would do it. I can see how all these factors, chipset, bios, OS, 32 vs 64 would have an impact on the amount of memory a system can address, but I do not think it is one single thing that does it.
Does the BIOs see 4GB RAM? Perhaps one of your modules is defect.
im using 64bit win7, but some software does not support to 64bit, so now i want to install 32 bit – win7 , it can be upload from my original window cd or i have to purchase new win cd
I will chime in again in regards as to why you can see various amounts of RAM in Vista x86 if you have 4 GB RAM installed. It all comes down to what is on your bus lines, how much space each of these items take up in RAM, whether or not they are disabled and removed from the memory map. There is also a trick that can be used on some newer machines that if you have say 6 GB installed with Vista x86 installed, you can get into BIOS and set the video memory (for on-board video graphics chip-sets, like the ATI HD 3200) to appear above the 4 GB RAM boundary but yet, the Vista x86 driver still can see the memory and use it, there are a couple of other items where you can do this too.
This ability stems back from the old days in the 1980s when there was a push to access more memory and how to go about it, go flat memory model (aka expanded memory) or go paged memory (extended memory), Lotus/Intel/Microsoft (LIN for short) settled on extended memory because of the way in which memory was accessed and could be used on all Intel based chips without too much of a hassle.
Technically, the reason why Vista x86 cannot see the full 4 GB of RAM you see, is that it’s looking at the hardware and the core of it’s own OS and subtracting out that from the “user mode” RAM, in other words what you can use or rather what external applications can use in which you in return use them.
What is keeping Vista x86 from seeing past the 4 GB RAM barrier despite running on a 64-bit machine and having more than 4 GB RAM installed? Simple, it’s a Microsoft licensing issue, that’s all.
Vista is the little brother of the Windows 2008, you might notice you get updates for Windows 2008 / Vista from Windows Update, essentially they’re the same OS except the licensing grants you a kernel can use /PAE that can see past 4 GB RAM (only in some cases). Microsoft will say that you can only use 4 GB RAM but that’s not entirely true, as I have machines running 2008 and displays close to 64 GB RAM, uses up to 64 GB of RAM in the machine.
The reason why Vista is so hard to understand about the complex coding used in the kernel, is that you would need to sit down with the team at Microsoft to get the full details. In short, they didn’t have a clear picture of what people wanted out of their operating system because they went with surveys that were way too vanilla and didn’t have slots for explaining how it was to work. Their surveys were pointed for their employees rather than the consumers which was the wrong thing to do.
Technically, the way in which Vista x86 shows the memory is in fact correct, it’s showing you how much memory you can actually use, it says, “Memory Free”, although, I would have said out of x GB RAM, then list what is sitting in the RAM that you cannot access, just to make people more happy.
Most applications in the Windows 2k, XP, and Vista don’t use more than 2 GB for anyone application unless you are doing video editing, etc., for example games.
For this very reason, the speed of your processor, the speed of your RAM and it’s timings become very important if you are gaming because you cannot access much RAM and to minimize that lag seen in many of today’s games they have to get creative, that includes doing streaming textures. With the advent of better GP-GPU performance and being programmable these days, that will take the major hurdles for your machine and allow you a comfortable range of detail while not bogging your system down, even if you can see only up to 2 GB RAM but have 4 GB installed.
As far as the software not being compatible with Windows Vista or 7 x64, that may not be the issue. You might be trying to use a really old application that uses 16-bit calls which is been dropped in Windows 7 and Vista, both on the 32 and 64 bit versions. If you need
that type of compatibility, there are applications that emulate that hardware setup and allow you to use those apps on the newer OSes.
By default, most applications are not aware of what operating system they are running on nor what edition type 32 or 64-bit very few check the Microsoft strings for what it’s sitting on.
If all else fails, if it worked on Windows XP 32-bit try using the Windows Compatibility Modem (WCM for short) on Windows 7, set it for the application you are trying to run. It’s one of those, right click on the icon on the desktop or in the Program Files off of the Start menu button, you go to Properties. It’s in there that you can change the compatibility. If you need a specific set of instructions I can put that out there for you or Michael can do so as well.