When is 4GB of RAM not really 4GB? When you use 32-bit Windows…
Anybody who’s ever tried to max out memory on a PC motherboard has probably had their share of grief. For a long time, in fact, I couldn’t even get the hardware to recognize 4 GB of RAM (especially in older ICH5 and ICH7 motherboards). I also learned the hard way that my Gigabyte GA-P35T-DQ6 motherboard, despite its support for 1066 MHz DDR3, won’t let me populate all four memory slots in the board without developing stability problems. Crafty soul that I am, I checked with my uberGeek buddy, Thomas Soderstrom, and he recommended upgrading to 2 2GB DIMMs instead of the 4 1 GB DIMMs I was using. By happy chance, this does the trick and now I’ve got 3,581 MB (about 3.5 GB) of RAM at my disposal on my Vista Ultimate machine, as shown in this nifty screen shot.
But wait! Didn’t I say I’d installed 4 GB of RAM. Where did the other memory go? That’s where things with 32-bit Windows operating systems get interesting. It turns out that although the OS can address up to 4GB worth of memory, a fair-sized chunk of that address space gets allocated away for other uses, thereby reducing the total amount of memory that Windows can see and use. “What other uses?” you ask (incredulously, I hope). Turns out that PCI memory addresses work from the 4 GB high water mark on down, and get used for the system BIOS, I/O and networking devices, PCI hubs, bus bridges, PCI-Express and even (you probably could have guessed this yourself) video cards. The BIOS eats about 512 KB at the top, then other stuff grabs its addresses beneath it until all have what they need, and Windows lets you use whatever is left over. According to this HP white paper: “The largest block of addresses is allocated for today’s high performance graphics cards which need addresses for at least the amount of memory on the graphics card.”
Zounds! Good thing my 8600GT uses “only” 512 MB of RAM, eh? Add another 512 KB for the BIOS, and we’re left with 3,583.5 MB of RAM, or about 2.5 MB less than what you see reported in the Task Manager Performance pane above (Total entry in the Physical Memory pane). By process of elimination, that means all the other stuff mentioned in the preceding paragraph—namely, I/O and networking devices, PCI hubs, bus bridges, PCI-Express, and whathaveyou, is where that other 2.5 MB is allocated.
Does this make a good argument for running 64-bit Vista instead? Only if your hardware (and your wallet) can jump the following hurdles:
- All hardware components must support 64-bit addressing, including the CPU, chipset, and memory controller.
- The motherboard actually has to work with the memory configuration you install (now you know why I mentioned the glitch with the P35 motherboard that I’m using, and also why I hasten to point out that newer P35’s don’t have this problem, nor does the more powerful X48 chipset, either).
- You have to be able to populate the motherboard with more than 4 GB of RAM (notice the “more than”—you won’t really get the advantage of using 64-bits for addressing, unless there’s something about the 4 GB high-watermark 32-bit address for the 64-bit system to use—ideally at least as much memory as you lose when running in a 32-bit environment, so as to grant address space for all that stuff “above the line” as it were)
- Your applications must be available in 64-bit versions, or work satisfactorily in the 32-bit WoW (Windows on Windows) environment that runs on 64-bit Windows systems (some apps are OK with this, others are not—you basically have to take the “try it and see” route).
I’m not quite ready to make the 64-bit jump just yet, but cheaper memory prices and more capable motherboard circuitry probably means I’ll ponder that decision more purposefully on my next system upgrade. For more information on this subject, see Tony Northrup’s excellent article “Maximum Memory in 32-bit Windows Vista” or his coverage of Windows Vista Memory architecture in the Windows Vista Resource Kit.