I just upgraded my Lenovo R61 laptop from 3GB to 4GB. After the upgrade Lenovo technician showed me that BIOS was saying – 4GB memory installed. When I started Windows 7, I fired up Task Manager and I can see that Total Physical Memory was 3,096MB or just 3GB. When I ask the technician what is wrong, I got the answer –“Well, Windows 32 bit can only show up to 3GB. If you need to use 4GB you need to upgrade to Windows 7 64 bit.”. My first reaction was – “But wait, 32 bit means that overall 4GB of memory can be accessed, right? So why do I only see 3GB of total memory.”. Then he said something about memory bus, addressing and Windows hardware support, and final line was – “Well, I need to calculate how big exactly is 32 bit number”. At this point it was clear to me that I need to figure out the issue by myself.

Looks like Windows 2000, XP, Vista and 7 support 4GB in their 32 bit version as written here: Memory Limits for Windows Releases.

However displaying that information is a little bit tricky as it has been changed from Windows Vista to Windows Vista SP1.

Windows Vista (with SP1 installed) or later will show you the total physical memory installed on the machine (Windows Vista SP1 includes reporting of Installed System Memory (RAM)) by going to Control Panel/System or My Computer/Properties window. On my machine (Windows 7) this is what I see:

Installed memory (RAM): 4.00 GB (2.99 GB usable)
System type: 32-bit Operating System

Windows Vista (without SP1 installed) will show you the actual memory available to Windows due to reserved memory-mapped I/O (MMIO) as the following article explains:

The system memory that is reported in the System Information dialog box in Windows Vista is less than you expect if 4 GB of RAM is installed

For example, if you have a video card that has 256 MB of onboard memory, that memory must be mapped within the first 4 GB of address space. If 4 GB of system memory is already installed, part of that address space must be reserved by the graphics memory mapping. Graphics memory mapping overwrites a part of the system memory. These conditions reduce the total amount of system memory that is available to the operating system.
The reduction in available system memory depends on the devices that are installed in the computer. However, to avoid potential driver compatibility issues, the 32-bit versions of Windows Vista limit the total available memory to 3.12 GB.

Regardless of how Windows reports memory available, the real available memory to Windows seems to be constrained to 3.12GB on 32bit version of Windows and this is what Task Manager is actually showing.

Read more about this constraint on Windows memory FAQ.

There is an option to make Windows 32bit to “see” memory over 4GB that is called Physical Address Extension. However this option is more like software mapping of memory regions and has lots of issues with device drivers.

Let’s move to our next article in this research – Pushing the Limits of Windows: Physical Memory by Mark Russinovich. In his article Mark give a nice wrap up of our problem so far:

While 4GB is the licensed limit for 32-bit client SKUs, the effective limit is actually lower and dependent on the system’s chipset and connected devices. The reason is that the physical address map includes not only RAM, but device memory as well, and x86 and x64 systems map all device memory below the 4GB address boundary to remain compatible with 32-bit operating systems that don’t know how to handle addresses larger than 4GB.

However it is interesting to see that Mark’s machine has a little more memory available:

Installed Physical Memory (RAM) 4.00 GB
Total Physical Memory 3.50 GB

You may think that you should never install 32bit system with 4GB of RAM, however this comment from Anna N on Mark’s post put me into thinking:

Yes, there’s a reason to have 4GB under 32bit OS, and that is because most graphic cards have 512MB or less, so even after drivers’ memory holes you have usually much more than 2GB available, and that’s useful for caching (so for casual usage, too), especially under Vista. 4GB is (on current platforms) better than 3GB because of dual channel memory so 2x2GB means better memory performance than 2GB+1GB. This may change on triple-channel Nehalem, maybe 3x1GB will be better.

Looks like even though I cannot use this 1GB I just bought, still my memory works now in dual channel mode which is faster than previous configuration.

So the question that we are left so far with is “How I can see what is taking up my memory between 3GB and 4GB memory range and is there a way to use some parts of that area?”.

These 0.5 GB difference of memory in my machine and Mark’s are about 12% of the total memory and it can really make the difference for my heavily used laptop.

I will continue my research in part 2 of this post.