Many posts these days about the 4GB limit to 32 bit OS (most versions of Windows in use)
This post is an attempt to clarify and summarize the reasons we never actually get to use the full 4 gigabytes of system RAM we just installed on a Windows 32 bit OS (this includes Windows XP, Vista and 2000.)
Oddly the reasons for this are not very well documented... anywhere!
MS has little to say on the subject other than the fact that there 32 bit OS are restricted to 4GB total, and that 2GB is taken by system OS and 2GB is available for apps. Although the right info is actually there, it is never explained in a way that takes into account what the actual limitation is that prevents your system from seeing all 4GB DIMM memory you just installed.
I don't quite understand why this is that MS is so silent on the subject in a easy to understand terms,. but it may be due to the fact that the missing RAM is due to your hardware, and MS does not want to discuss hardware?
Where's all my RAM? :
Let's start with the assumption that we have the correct hardware to handle the installed RAM, and 4GB of RAM installed.
The BIOS "sees" all 4GB in post, but Windows displays only 3.2GB RAM in system properties. So where's the rest? It's still there, but you can't use it all.
Heres is what is happening.
Windows can "address" 4GB of RAM total.
This total is not only reserved for your actual physical RAM Dimms you install,. The key word here is "address"
In Windows, hardware devices and ROM are mapped to memory space starting at 4G and down.
If you installed total 4GB memory, the system will detect less than 4GB of total memory because of address space allocation for other critical functions, such as:
- System BIOS (including motherboard, add-on cards, etc..)
- Motherboards resources
- Memory mapped I/O
- configuration for AGP/PCI-Ex/PCI
- Other memory allocations for PCI devices
Different onboard devices and different add-on cards (devices) will result of different total memory size visible to you and the OS.
e.g. more PCI cards installed will require more memory resources, resulting of less memory free for other uses.
Analogy time:
Let's use this word "address" for our analogy.
You are the OS, your installed memory are your workers,. the system hardware are your supervisors, and your (oue Windows) ability to contact all of the above is your "address book"
The Key again is your address book.
It can hold exactly 4,000 names, no more.
Example 1
You have 2,000 workers (2GB RAM installed)
You have a bunch of supervisors totaling 800 address book entries (system hardware requirements)
You organize your Address book in a hierarchical fashion, with the Workers starting at the back, but up top, are the Supervisors.
With 4,000 entries available, if you have 2,000 workers at the bottom of your directory, and 800 supervisor entries up top easier to find, the total addresses is 2,800 used in the book. You will be able to write down and contact all 2,000 workers.
Example 2:
You have 4,000 workers! (4GB RAM installed)
You have the same bunch of supervisors totaling 800 address book entries (system hardware requirements)
You start to write down the workers starting from the bottom of your address book but since you have 800 entries taken up top by the supervisors, you only have room to write in the contacts of 3,200 workers.
ie: You can use up to 4,000 but can only contact the 3,200 as those are the addresses you can fit in your book.
This is the 32bit limit.
Modern Machines suck up more resources:
As mentioned, the hardware installed will vary the amount of a hit you take on addressable DRAM considerably.
Recently a number of changes in both hardware and Windows has made more ram seem to go missing.
Some changes to the OS in SP2 and most Motherboard firmwares since then were written to alleviate some issues with driver conflicts. These same changes increased the amount of Address space reserved, and thus decreased the amount of RAM you will see in Windows. (this applies to Vista as well)
A good deal of the address book is being taken up by PCI resources.
It turns out that PCI -Express is even more demanding than PCI or AGP were, so these Mobos are taking even more of our RAM's bottom line.
Motherboards used to have a much more limited number of onboard features as compared to today.
Disk controllers and PS2 ports etc, but now we get dual Ethernet jacks, two or more USB2 controllers, RAID controllers, onbaord sound, (much more complex onboard sound), BIOS based antivirus protection, and on and on.
In 2002 The PCI bus itself took some resources, but you had to stuff those PCI slots with 4 or five cards to equal the amount of hardware that comes soldered on a Motherboard these days.
Graphics RAM is still RAM. Unless you have 4GB of RAM installed you'd never know it. but it too is taking up valuable room in your limited capacity address book.
Graphics RAM used to be a small number like 8 or 16MB,. now we have 512MB cards and with SLI we can install two of them. Bam! that's 1GB of your address book gone!
Want to see what's taking the Top end RAM? :
Here's a cool thing for the curious and trouble shooters among us. We can actuyally have Windows tell us exactly what hardware is sucking up address space and RAM resources,, and we can even find out how much for each (though that part will take a computer science degree and a translation effort on par with the Rosetta Stone and the dead sea scrolls! )
In WINXP
- Right Click on My Computer and select Properties.
- Select the Hardware Tab.
- Click on "Device Manager"
- In the top menu bar, click "view" and select "Resources by Type"
- Now click on the plus sign ( + ) next to "Memory"
Now you get a list of all the hardware that is grabbing memory and address ranges.
You also now get a real world view of what all this address nonsense means.
Those numbers [In - brackets] are actual memory address ranges.
With the right tools, you could use those numbers to see how much RAM each of those numbers represents.
Can I get any RAM back? :
It's often possible, but not always easy. It depends on hardware and software changes.
Software wise, the /PAE switchCan help! but this is only if your hardware is up to the task. The HOW TO on the /PAE switch follows below.
On my system the /PAE switch added to teh BOOT.ini line of the XP32 OS worked immediately! A simple edit and reboot and I went from 2.5GB RAM available to the full 4GB.
But, my Motherbaord and hardware is made to handle as much as 32GB of RAM in a 64 bit OS, so the ONLY thing preventing this from working was Windows XP 32
YMMV.
Hardware:
Your Mobo may be taking more resources than required, and there may be ways of adjusting BIOS settings to get some back. Older Mobos had a setting for AGP that could effect things.
Certain unused hardware being disabled or removing unused cards should get some memory back.
The most you can usually get is approx 3.5 (without the /PAE switch) but these days with modern hardware this is rare. Norms are now in the 2.5-3GB range, with some dipping below 2.5
64 BIT OS
Windows 64 bit OS's can address 128GB of RAM. (potentially 64 bits can address far more, in the terabytes, but the current Windows OS' limit the addressable RAM to 128GB)
This means that when you install 4GB or 8 or 16 or 32 etc.. you will see essentially all of it as the "supervisors" are not touching the address space of the DRAM.
The /PAE Switch and Your Boot.ini file: You may be able to get all 4GB back!
Assuming your hardware will support it, and you are running the right version of an MS 32 bit OS, adding this line to your "boot.ini" file may give you full access to your 4GB of RAM.
To do this you need to do the following;
- Go to your Boot drives ( C: usually ) root directory.
- Make sure you can see "hidden and system files"
- Right click on the semi transparent "boot.ini" file and select "open with"
- Chose "notepad"
- The text should read "similar" to this; ( might not be exact )
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Home Edition" /fastdetect /NoExecute=OptIn
- In notepad, add "PAE" to the end of the line with a single space in between (no quotes)
- Like so;
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Home Edition" /fastdetect /NoExecute=OptIn /PAE
- Save the file,
- Close "notepad"
- Reboot.


