I <3 Steve McConnell*
Coding Horror
programming and human factors
by Jeff Atwood

March 8, 2007

Dude, Where's My 4 Gigabytes of RAM?

Due to fallout from a recent computer catastrophe at work, I had the opportunity to salvage 2 GB of memory. I installed the memory in my work box, which brings it up to 4 gigabytes of RAM-- 4,096 megabytes in total. But that's not what I saw in System Information:

Vista System Information, 4 GB installed, 32-bit operating system

Only 3,454 megabytes. Dude, where's my 4 gigabytes of RAM?

The screenshot itself provides a fairly obvious hint why this is happening: 32-bit Operating System. In any 32-bit operating system, the virtual address space is limited, by definition, to the size of a 32-bit value:

232 = 4,294,967,296
4,294,967,296 / (1,024 x 1,024) = 4,096

As far as 32-bit Vista is concerned, the world ends at 4,096 megabytes. That's it. That's all there is. No más.

Addressing more than 4 GB of memory is possible in a 32-bit operating system, but it takes nasty hardware hacks like 36-bit PAE extensions in the CPU, together with nasty software hacks like the AWE API. Unless the application is specifically coded to be take advantage of these hacks, it's confined to 4 GB. Well, actually, it's stuck with even less-- 2 GB or 3 GB of virtual address space, at least on Windows.

OK, so we're limited to 4,096 megabytes of virtual address space on a 32-bit operating system. Could be worse.* We could be back in 16-bit land, where the world ended at 64 kilobytes. Brr. I'm getting the shakes just thinking about segments, and pointers of the near and far variety. Let us never speak of this again.

But back to our mystery. Where, exactly, did the other 642 megabytes of my memory go? Raymond Chen provides this clue:

In the absence of the /PAE switch, the Windows memory manager is limited to a 4 GB physical address space. Most of that address space is filled with RAM, but not all of it. Memory-mapped devices (such as your video card) will use some of that physical address space, as will the BIOS ROMs. After all the non-memory devices have had their say, there will be less than 4GB of address space available for RAM below the 4GB physical address boundary.

Ian Griffiths offers a more detailed explanation:

To address 4GB of memory you need 32 bits of address bus. (Assuming individual bytes are addressable.) This gives us a problem - the same problem that IBM faced when designing the original PC. You tend to want to have more than just memory in a computer - you need things like graphics cards and hard disks to be accessible to the computer in order for it to be able to use them. So just as the original PC had to carve up the 8086's 1MB addressing range into memory (640K) and 'other' (384K), the same problem exists today if you want to fit memory and devices into a 32-bit address range: not all of the available 4GB of address space can be given over to memory.

For a long time this wasn't a problem, because there was a whole 4GB of address space, so devices typically lurk up in the top 1GB of physical address space, leaving the bottom 3GB for memory. And 3GB should be enough for anyone, right?

So what actually happens if you go out and buy 4GB of memory for your PC? Well, it's just like the DOS days - there's a hole in your memory map for the IO. (Now it's only 25% of the total address space, but it's still a big hole.) So the bottom 3GB of your memory will be available, but there's an issue with that last 1GB.

And if you think devices can't possibly need that much memory-mapped IO, I have some sobering news for you: by this summer, you'll be able to buy video cards with 1 GB of video memory.

To be perfectly clear, this isn't a Windows problem-- it's an x86 hardware problem. The memory hole is quite literally invisible to the CPU, no matter what 32-bit operating system you choose. The following diagram from Intel illustrates just where the memory hole is:

Intel system memory map

The proper solution to this whole conundrum is to use a 64-bit operating system. However, even with a 64-bit OS, you'll still be at the mercy of your motherboard's chipset and BIOS; make sure your motherboard supports using 4 GB or more of memory, as outlined in this MSKB article.

264 = 18,446,744,073,709,551,616
18,446,744,073,709,551,616 / (1,024 x 1,024) / 8 = 2 exabytes

In case you're wondering, the progression is giga, tera, peta, exa.

Although the performance benefits of 64-bit are somewhat dubious on the desktop, a 64-bit OS absolutely essential if you run applications that need to use more than 2 GB of memory. It's not common, but we're getting there.

The memory hole for IO still exists in the 64-bit world, but most modern BIOSes allow you to banish the IO memory hole (pdf) to some (for now) ridiculously high limit when you're running a 64-bit OS. Don't get too excited, though. The user-mode virtual address space in 64-bit Windows is a mere 8 terabytes. Suffice it to say that we won't be running out of physical or virtual address space on 64-bit operating systems for the forseeable future. It's the final solution, at least for the lifetime of everyone reading this blog post today.

Here's one parting bit of advice: if, like me, you're planning to stick with a 32-bit operating system for the next few years, don't waste your money on 4 GB of RAM. You won't be able to use it all. Buy 3 GB instead. Every motherboard I'm aware of will happily accept 2 x 1 GB and 2 x 512 MB DIMMs.

* Could be raining.

Posted by Jeff Atwood    View blog reactions
« Getting the Most Out of PNG
Software Internationalization, SIMS Style »
Comments

> In any 32-bit operating system, the physical address space
> is limited, by definition, to the size of a 32-bit value

No... the /virtual/ address space is limited to 32 bits. It's possible to have more /physical/ memory than this, and it's even useful if you want to run more than one large process at a time. PDP-11s did this, AFAIR.

I don't know enough about Windows or Intel architecture processors to know whether this is possible in that environment, though.

John on March 9, 2007 2:18 AM

Do you need 4gigs of ram on a desktop machine though?

Well a few years ago I would have laughed at you but seeing how 2gigs actually makes a difference in Vista due to the improved memory management, I'd have consider going for it... If it didn't mean I had to scrap my 4* 512 stick... But I guess even that's off the table until people stop faffing around with 32bit desktop applications and decide they're bored of it.

Oli on March 9, 2007 2:25 AM

John: you're absolutely right. Corrected.

And the 36-bit PAE Intel extensions are what you're thinking of, but they're still a nasty hack. Far better to lace up your boots and go 64-bit now that AMD blazed the trail.

Jeff Atwood on March 9, 2007 2:26 AM

When I built up my current PC I chose "Windows XP x64 Pro" for this very reason (plus I didn't see the point in restricting my shiny new 64-bit CPU).

Sadly support for XP x64 has been mediocre at best. Some major hardware players (e.g. Netgear) have outright refused to produce drivers for it. Others have produced cut-down software that functions, but misses important features when compared to the 32-bit version.

Even Microsoft, who marketed x64 as meeting the "increasingly sophisticated demands for making home movies, working with digital photographs, using digital media" have not issued x64-compatible versions of their "Color Control Applet" or the "RAW Thumbnail Viewer" - both of which would be very useful add-ons for people working in exactly those fields.

Given this experience I am watching Vista 64-bit with quiet interest. A quick trawl around various hardware websites shows that most drivers offered are labelled as Vista 32-bit only. Is history set to repeat itself?

GrahamStw on March 9, 2007 2:27 AM

Graham, I expect the driver situation to be much better with Vista x64. The 64-bit version of XP release was a weird, out-of-band release that never had proper levels of support. XP was released in 2001, and x64 XP was released in, what, 2005? That's weird.

But with Vista, x64 is a first-class citizen, released at the same time alongside all its x86 brethren.

Of course it'll still take time. Some companies still don't have plain old x86 drivers for Vista that are any good. But within the next 2 years, I expect x64 driver support to at rough parity with x86.

Jeff Atwood on March 9, 2007 2:32 AM

You say [quote]"To be perfectly clear, this isn't a Windows problem-- it's an x86 hardware problem. The memory hole is quite literally invisible to the CPU, no matter what 32-bit operating system you choose. The following diagram from Intel illustrates just where the memory hole is: image"[/quote]

and then show an image of a DOS compatible memory layout. As far as i'm aware, the only OS to actually use this kind of layout would be from a certain company in Redmond. I know none of my machines have a DOS compatibility region in place, so i would say this in fact _is_ a windows issue, not and x86 one.

Kris

kris on March 9, 2007 2:51 AM

Jeff, I do hope things will improve, but I won't be convinced that 64-bit has hit mainstream until I see major OEMs shipping PCs with Vista 64 installed as standard.

Personally I wish Microsoft had *only* released a 64-bit version. After all, it is supposed to be the OS for the next generation of PCs isn't it? And I doubt many of them will be 32-bit.

Paul Thurrott makes some important points on his Windows SuperSite:
http://www.winsupersite.com/showcase/winvista_ff_x64.asp

GrahamStw on March 9, 2007 2:55 AM

Man, are you sure 4GB will be _enough_ at all, for Windows Vista?

Salvatore Iovene on March 9, 2007 3:08 AM

Nice article, again. You mentioned BIOSes that move the mapped PCI memory to a very high address. Actually the Asus BIOS I have works the other way round: the RAM between 2 GB and 4 GB is remapped to 4+ GB.

I've recently upgraded to 4 GB because I'm dumb and curious and have too much money. Now I found that I have to enable this setting when running Memtest86 1.70 so that it can see all 4 GB. It will test them in to chunks: 116KB (or so) to 2 GB, and 4 GB to 6 GB, because that's where the BIOS has mapped the second 2 gigs.

But for booting Windows (XP 32-bit) I have to disable memory remapping in order to get at least a measly 3 GB (the 8800's video RAM takes up all the rest!).

Chris Nahr on March 9, 2007 3:28 AM

Kris, I think how did you correlate the limitation of 32bit addressing with DOS compatibility?

Damian on March 9, 2007 4:05 AM

So... if we buy x64 hardware, will a 32 bit OS still see all 4 GB, or do you have to have a 64 bit OS as well?

I won't be going to a new OS anytime soon ( I want Vista, and don't have the money for it yet). But my church is looking at upgrading to 4GB in the recording computer...

Eric D. Burdo on March 9, 2007 4:53 AM

haha great jeff! very interesting this article!
its silly but i never thought about a limit like that in the modern computer architecture.
i just hope to live until the day that i can say: dude!! where are my 19 EB (aka Exabyte)??? hahah

ps. hey jeff i would to suggest you the topic of one of your next articles, cause i was thinking if exist a diet, or better like position to improve productivity for programmers cause i am getting pretty fat haha :D. sorry i go always off topic. Regards.

Donnie from Rome on March 9, 2007 5:06 AM

Actually, the physical processor does have, to this day, DOS compatibility in microcode and bios. (Maybe in stub form, running DOS probably won't actually work anymore with new hardware anyway, I don't know if anyone's even tried it in years.) When they say x86 ISA is 'legacy baggage' they don't just mean the silly register layout and instruction set.

The northbridge or HT bridge controls all access to memory, both DRAM and PCI chips (and bios and other device junk), and it's the one that initializes PCI devices into certain slots. That's why the cpu, and thus the OS, is incapable of seeing through it.

Foxyshadis on March 9, 2007 5:06 AM

"The user-mode virtual address space in 64-bit Windows is a mere 8 terabytes.... It's the final solution, at least for the lifetime of everyone reading this blog post today."

You think? In the early 90's, I had a computer with 2MB of RAM. Today (17 years later), it is feasible to have 4GB. That's 2,000 times more memory. If the same trend continues, we could have 8TB by 2024. Certainly within most of our lifetimes.

Jeremy on March 9, 2007 5:25 AM

Kris, you are embarrassing yourself with such comments, so the 1MB "DOS compatibility" is what makes the 4G limit ? LOL.

PL on March 9, 2007 5:31 AM

Ya know, I thought it was common to be using the PAE kernel these days, at least on recent NX-capable hardware.

You haven't disabled DEP, perchance?

http://msdn2.microsoft.com/en-us/library/ms791508.aspx

I'm running X64 at home and at work, so can't readily check :)
Mental note to look that up sometime.

TristanK on March 9, 2007 5:32 AM

Jeff, I think you should edit this article, because your recommendation:

"The proper solution to this whole conundrum is to use a 64-bit operating system"

is misleading, and may well cause people serious grief. There are loads of systems out there with 64-bit CPUs that only have a 32-bit physical address range. For example, the vast majority of laptops only have a 32-bit physical address range, even though many are now available with 64-bit CPUs. And plenty of desktop systems have the same issue.

People following your advice are liable to put themselves to the inconvenience of switching to a 64-bit OS only to find that it doesn't actually solve the problem - they're still limited to 3.5GB of RAM, but now they have the additional problems that half their devices are no longer properly supported, and their OS now has a bigger memory footprint thus *reducing* the amount of memory available for doing useful work... Most people will not regard this as an improvement, and they could reasonably be annoyed with your advice.

The bottom line is this: a lot of chipsets only use 32 address bits - the higher order address bits on the processor are not wired up to anything more than terminating resistors. Turning on /PAE or switching to 64-bit won't help you if you have such a chipset because the CPU doesn't have a way of asking for stuff above the 4GB mark. 64-bit will let you get more than 2GB of *virtual* address space in a process, but you'll still be stuck with 3.5GB or so of physical memory.

So if I were you I'd qualify your recommendation before you get a horde of angry people beating a path to your door... Make it clear that you need to have a suitable chipset. Moreover, if you do have a suitable chipset you probably don't actually need to go 64-bit. /PAE may actually be a better option in reality, given today's less than total support for 64-bit. PAE may be a hack, but who cares? The OS deals with it; it's no uglier than the fact that my machine has >4GB of virtual memory (my physical memory + page file is >4GB, on my 32-bit system). 64-bit isn't about breaking through the 4GB barrier of physical addressing - it's only really useful if you've hit *virtual* address space limits, which is really a completely different class of problem than the one you open this blog entry with.

(Although if you need more than 64GB of memory, I believe 64-bit is necessary. PAE only goes up to 64GB of physical address space.)

In short: the 3.5GB problem is usually a chipset thing, not a 32 vs 64 thing. Unless you have individual processes requiring more than 3GB of memory, /PAE is often a better solution. (With most people I know who need this much memory, it's because they are hosting a couple of VMs, and /PAE is just fine for that.) And if /PAE doesn't work on your system, switching to 64-bit probably won't either.

Ian Griffiths on March 9, 2007 5:35 AM

I'm in the same boat as Graham, well not exactly, I can't even find all the proper drivers for 32 bit Vista. So it's a waiting game to first get all the necessary drivers for my hardware then for the applications I require to be compatible.

Kevin Taylor on March 9, 2007 5:50 AM

Nobody will ever need more than 4 X 10^24 exabytes of memory...

Gee, I wonder what the equivalent neural capacity of the brain is...

Oops, were comparing apples to kiwis, or should I say analog to digital.

If there is one thing that I've learned, if you offer more hardware capacity it will be used.
"Is your name Sahra O'Conner?"

Rabid Wolverine on March 9, 2007 5:57 AM

Here's a nickel, kid. Go buy yourself a real computer.

nitrogen:~# cat /proc/meminfo
MemTotal: 4051648 kB
MemFree: 66600 kB
Buffers: 360016 kB
Cached: 2215200 kB
SwapCached: 12 kB
Active: 818808 kB
Inactive: 2175504 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 4051648 kB
LowFree: 66600 kB
SwapTotal: 9823672 kB
SwapFree: 9823244 kB
Dirty: 272 kB
Writeback: 0 kB
Mapped: 449972 kB
Slab: 970272 kB
CommitLimit: 11849496 kB
Committed_AS: 799204 kB
PageTables: 4424 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 5024 kB
VmallocChunk: 34359733327 kB

Eugen Leitl on March 9, 2007 5:58 AM

I ran into the exact same problem on my Vista 32-bit box... the memory showed up properly in the BIOS, but not in System Information. It turns out that Microsoft recently released a KB article to describe the problem (although they didn't go into the level of depth that you did... great job!)

http://support.microsoft.com/kb/929605/en-us

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

Sean on March 9, 2007 6:00 AM

Ian, what 64 bit chipset uses 32 bit addressing ? That is by definition not a 64 bit chipset then, sounds very strange to me but it wouldn't suprise me if you are correct that some do (probably Intel).

Go with AMD64 which was the orginal inventor of the EM64 extensions that Intel then "stole" (yes I know they can with the patent agreement from -94) and you'll most likely be safe from such issues.

As for the prople coming here posting some printouts from various *nix systems, you really need to read the article again, this is NOT a Windows issue, my good, you are embarrasing.

PL on March 9, 2007 6:05 AM

I'm currently running an Intel Core Duo that is about a year old and it simply isn't x64 capable. This is in response to the poster who "wished Microsoft had only released an x64 version of Vista". They would have left a lot of us out in the cold.

With that said, you can see why many hardware manufacturers haven't been too quick to come on board. x64 Win XP has only been used by a select few to date because you would have had to buy fairly high end processors to even run it. Only now are mass consumers finally being offered processors that can support the x64 OS's (at least for Intel).

Matt on March 9, 2007 6:30 AM

bah, Eugene, here's a _real_ system:

root@/proc# cat cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 6
model name : Intel Celeron ("GenuineIntel" 686-class, 128KB L2 cache)
stepping : 5
cpu MHz : 501
fdiv_bug : no
fpu : yes
fpu_exception: : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr

root@/proc# cat meminfo
total: used: free: shared: buffers: cached:
Mem: 257118208 62099456 195018752 0 0 0
Swap: 511995904 0 511995904
MemTotal: 251092 kB
MemFree: 190448 kB
MemShared: 0 kB
Buffers: 0 kB
Cached: 0 kB
SwapTotal: 499996 kB
SwapFree: 499996 kB
cat: meminfo: Invalid argument

David H. on March 9, 2007 6:49 AM

"Could be raining!"

I just watched that movie last night, and I read this blog post directly afterwords. What are the odds?

TM on March 9, 2007 6:51 AM

You know what's funny? I am running 4GB of physical RAM on 64bit hardware, but I don't have a 64-bit version of my O/S. I really should upgrade, but since I get to see 3.4 GB of it anyway, there's not much incentive...

Elliott C. Bäck on March 9, 2007 7:02 AM

Matt, I disagree that only now are consumers getting x64 CPUs. Athlon64s have been available since late 2003. I built my current PC in September 2005 and I specced it with an Athlon 64 X2 3800+ which wasn't unusually expensive or "high-end" even back then.

Look at a major manufacturer like Dell and even some of the cheapest amd most basic systems they offer use 64-bit capable CPUs.

Okay, perhaps it is too much to expect Microsoft to exclude 32-bit completely, but why is it the default? It currently isn't possible to buy a retail version of Vista 64. Instead you buy the 32-bit version and then follow the instructions inside to send off for the 64-bit one!

Given my experiences with XP x64, I don't find that approach very comforting.

GrahamStw on March 9, 2007 7:02 AM

On the whole 64-bit / x86 that was mentioned earlier in the comments...

I avoided 64-bit carefully for a number of reasons. First, X32 is the supported standard, and I knew that Intel was coming out with multi-core processors. I figured, and I think I may have figured correctly, that people were going to be more willing to figure out multi-threading than they were going to be willing to figure out X64 architecture. I sort of saw this coming when Apple began releasing dual-processor G5s several years ago.

Much as I think the whole concept of "more processors equals better computer" argument is rather silly, it is the way the industry tends to trend. I mean, it took years for all the die-hard Apple fans to swap from Motorola to PowerPC chipsets, and they only did that because they more or less had to for speed purposes. Apple continued to support FAT applications right up the the release of OS X.

To this point, most PCs since the industry really got off the ground with the 8086 have all been based on that exact architecture. S'why we call 'em X86. Of course, I never knew if "286" was short-hand for 8286, or if it literally went 8086, 268, 386, 486, Pentium, Pentium II, Pentium III, Pentium 4, Intel Core Duo, etc. I'm sure I've missed one or two iterations in there.

I'm hoping they're going to have the quad-cores available for purchase this summer when I'll be trolling for yet another new computer. If they don't, I'll probably just max out a dual core system. It's something, anyway.

Jae on March 9, 2007 7:20 AM

I did have a point in there: adoption will be slow, but it WILL happen, eventually.

My curiosity is that since I never really studied 64-bit, what is its relationship to X86?

Jae on March 9, 2007 7:27 AM

Ian, using /PAE to address memory >4 GB on 32-bit systems has its own problematic issues, according to Microsoft. There's a performance penalty because I/O requests from 32-bit devices must be double-buffered, and some devices might not work at all, depending on the driver. I wouldn't want to recommend THAT to a general audience, either!

Chris Nahr on March 9, 2007 7:28 AM

"Ian, what 64 bit chipset uses 32 bit addressing ? That is by definition not a 64 bit chipset then, sounds very strange to me but it wouldn't suprise me if you are correct that some do (probably Intel)."
By the logic of the chipset/motherboard manufacturers supporting stuff that customers are unlikely to use is pointless, and thus it's unusual for motherboards to support the full address range of the CPUs they have. After all how many customers are going to have more than 2gb of memory?

Factory on March 9, 2007 7:33 AM

Okay, I just checked... my XP SP2 Pro system has PAE enabled (comes automatically with DEP). So for shits and giggles I enabled memory remapping in the BIOS and rebooted Windows. I know from MemTest that 2 out of my 4 gigs will now appear in the 4-6 GB range.

Yet Windows tells me that it has only 2 GB total! Total available memory, according to Task Manager: 6 GB = 2 GB RAM + 4 GB page file.

Exactly where is that magical PAE memory supposed to appear?

Chris Nahr on March 9, 2007 7:40 AM

Mac Pro handles up to 16GB of RAM and 3TB of disk space.

Two 3GHz 64-bit Dual-Core Intel Xeon “Woodcrest” processors.

<http://www.apple.com/macpro/specs.html>

And with Parallels, you can run Windows, Linux, and MacOS x at the same time.

<http://developer.apple.com/documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html>

Charles Kens on March 9, 2007 8:02 AM

Charles: Mac OS has always been a little ahead of the curve in what sizes it will handle, both in RAM and Hard Drive capacity.

I seem to recall Macs handling the GB threshold more easily than did PCs.

Jae on March 9, 2007 8:11 AM

> To be perfectly clear, this isn't a Windows problem-- it's an x86 hardware problem

Indeed. The latest Intel Core Duo-based iMacs have the same issue. You can put 4GB in them, but they'll never be able to use more than 3 GB.

Dave C. on March 9, 2007 8:29 AM

"It's the final solution, at least for the lifetime of everyone reading this blog post today."

Are you serious? I was a kid when we were still in the world of kilobytes, and now we're tossing around gigabytes like candy. We could very well be fooling around with petabytes before I'm dead, though we probably wouldn't be doing it on Vista.

CrashCat on March 9, 2007 9:03 AM

"Suffice it to say that we won't be running out of physical or virtual address space on 64-bit operating systems for the forseeable future. It's the final solution, at least for the lifetime of everyone reading this blog post today".

Wrong statement. I'm not yet in my 30, and I've seen how addressing has grown from 640k to 4GB and then became short. That's a x6250 factor!! 4GB to 8TB it's only a x2000 factor, and HD video and photorealistic games didn't come yet.

danner on March 9, 2007 9:04 AM

So if I really want everything I get out of my memory, don't I want 3x 1GB sticks, AND 1x 512MB stick?

JJ on March 9, 2007 9:14 AM

Thanks for an interesting post. I'll have to look into it some more because I'm faced with this same issue right now.

I have a ASUS A8N32-SLI Delux mobo with 4 gigs or RAM. (4 * 1GB - Dual sided). When I go into the bios, it tells me that there is 4GB installed but only 3.38 Avail for use. Now I'm not sure if this is a bios issue or a mobo issue but if anyone has any clue, I'd love to hear it. (I'm planning an upgrade to my bios sometime this weekend - maybe that might work?).

I also have Vista 64 bit installed with VPC 2007 (The reason for my 4gb is so I can run an XP image with ease).

Sushant Bhatia on March 9, 2007 9:34 AM

Most of this went over my head, but I have a brand new intel core 2 with 4gb of ram, only 3070mb showing in windows. Dell support showed me in the bios that 4gb was there.

The issue is, I also had it installed with Office 2007 and what a memory hog it is! Right now I have Outlook 2007 open, along with a browser and I'm running at 55% of memory used.

I wondered if adding more memory was an option...guess not. :(

Good read..thx for the info.

Ron

Ron on March 9, 2007 9:35 AM

64-bit processors have been around, but not everyone buys or feels comfortable buying AMD. There are the hardheaded people that use what they grew up with and that's Intel. However, it seems like EVERY system I see advertised either has a Intel 64bit or AMD 64bit processor in it. To all those people I say "your welcome" as I have been running my AMD FX55 since the thing came out. I tried XP 64-bit when it came out, and not only did I have driver issues, I had software issues getting Flash to run in IE, etc.

Now I am running Vista Business 64-bit edition and I must say there is great 64-bit driver support. If the company has a 32-bit Vista driver chances are they have the 64-bit edition too. Some companies like HP don't have Vista drivers yet for all their printers, their short term resolution is to use the USB cable instead of the Network connection for things like Fax/Scanning. Other companies like Razer don't even have Vista drivers yet.

This leads me to my point, how long have these companies known Vista was coming? You can truly see which companies are dedicated to ensuring there products work with any OS and those companies that are just too small to spend the time developing drivers for every OS. Logitech > Razer, etc. Suprisingly about the only Vista driver Razer does have is for the Habu mouse they make for Microsoft.

But for those of you thinking about upgrading to 64-bit OS, do it! There is no distinguishable issues that I have run into outside of the lack of general Vista (32bit and 64bit) driver support for some of my devices. I am able to run IE, Firefox, Adobe CS2, Unreal Tournament 2004, Open Office, Office 2007, etc without issue. To me after I disabled all the extra stuff (Defender, Firewall, System Restore), I swear Vista boots faster then my old XP install.

And the Vista GA release doesn't crash like the RC1 version did either. There is a good availability of virus software out there, personally I use Kasperky. If you bought or are thinking about buying a new system that has a 64bit CPU, you paided for it, might as well use it!

Tim on March 9, 2007 9:37 AM

CrashCat had a good point.

"It's the final solution, at least for the lifetime of everyone reading this blog post today."

Note that you're talking about problems addressing 4GB in 2007, and also quote Ian Griffiths mentioning how the 8086 (designed in 1976) had to carve up 1MB. If that growth rate were to continue, we'd be looking at addressing 16TB in another 31 years. Of course we won't be using Vista then. (We aren't really using it now but that's another topic.)

I suspect it will be a lot less than 31 years until we see wide consumer adoption of some kind of terabyte-level optical memory or something else that leaves Moore's Law in the dust.

Dave on March 9, 2007 10:03 AM

> Mac Pro handles up to 16GB of RAM and 3TB of disk space.

Kind of academic, since OS X itself is not fully 64-bit.

http://arstechnica.com/reviews/os/macosx-10.4.ars/4

> So if I were you I'd qualify your recommendation before you get a horde of angry people beating a path to your door... Make it clear that you need to have a suitable chipset [to use 4 GB+ of physical memory]

Ian, good point, will do.

> Exactly where is that magical PAE memory supposed to appear?

It'll only "appear" in apps that explicitly code to support the AWE (address windowing extensions) API, which makes use of the PAE extensions in the CPU. I don't think the base OS does this, but applications might.

> When I go into the bios, it tells me that there is 4GB installed but only 3.38 Avail for use [and I am running a 64-bit OS]

As Ian pointed out, this is due to the BIOS; check your BIOS for an option that remaps IO memory above 4GB.

Jeff Atwood on March 9, 2007 10:04 AM

18,446,744,073,709,551K of RAM ought to be enough for anybody.

Bill Gates on March 9, 2007 10:11 AM

Not really knowing what the 32-bit Windows can or can not do, probably it does not know how to use memory at above 4 GB physical address, and you are stuck to 3 GB plus some. (Which for a salvaged memory is not too expensive..)

My current home computer is ASUS A8N-SLI Deluxe with AMD X2 (stepping 02) processor, and it definitely can use all 4 GB of installed memory.
However original BIOS didn't setup the "memory hoisting" correctly, and the end result was rather horrible crash if I tried to "hoist" and to use the memory above that limit. Then very recently there came out a new BIOS release that did it correct, and I am happy big memory spender...

So, if the motherboard BIOS setup has "memory hoisting" buried somewhere in the advanced menus, turning it on may help - or maybe not.
Then running your 32-bit operating system with /PAE enabled may let your operating system to use all 4 GB, permitting more big programs to run simultaneously without resorting to swapping.

By the way, for performance reasons I do prefer to run 64-bit operating systems, and 32-bit applications.
This is equally true for SPARCs running Solaris, as well as PC hardware running whatever.
Very few applications do benefit from 64-bit pointers, but operating system core is usually a different story, especially if you do have more memory than fits inside the first 4 GB.

Matti Aarnio on March 9, 2007 10:31 AM

Maybe all programs in near future comes in a usb-memory-like device that holds its own memory usage? Even its own cpu.. Would be nice.

Moving memory handling to the program instead of bios/OS.. Every program runs in its own world (virtual machine) with pipelines in and out to communicate with the host OS.
The real machines memory mapping will be to handle those pipes.

Stefan on March 9, 2007 11:13 AM

"Linux?"

Bingo.

Matt Daemon on March 9, 2007 11:19 AM

Yeah, why mess with Windows when there are dozens of Linux distros with thousands of precompiled packages for the x64 architecture?

D on March 9, 2007 11:35 AM

the behavior of the PAE switch on workstation versions of Windows changed beginning with SP2 for XP. Too many drivers were choking when handed addresses outside the 32-bit address range limit and MS was tired of being blamed for the resulting problems, so in SP2 they removed the portion of the PAE switch's behavior that remapped otherwise-inaccessible RAM below the 4G boundary to above the boundary.

john on March 9, 2007 11:39 AM

"Linux?"

umm Linux has the EXACT SAME PROBLEM so I'm not sure what this is in reference to. This is purely a hardware issue and has nothing to do with the OS. It is so funny to see how many people have absolutely zero idea how their system works... but are quick to recommend things like Linux to fix the problem rofl.

Joe on March 9, 2007 11:41 AM

Old information.

Kalibr on March 9, 2007 11:51 AM

Reminds me of my first 60 GB hard drive.

Took me a while to realize why I was trashing the FAT table/drive every time I wrote beyond 32GB.

engtech on March 9, 2007 11:56 AM

Why doesn't 32-bit Windows support PAE correctly?

Here's linux:

Linux 2.4.x does support greater then 4GB of physical memory (ie. RAM)

It does this by supporting Intel's PAE (Physical Address Extension) features which are in all Pentium Pro and newer CPU's.

It does this via indirect pointers to the higher memory locations, so there is a CPU and RAM hit for using this.

Benchmarks seem to indicated around 3-6% CPU hit just for using the PAE extensions (ie. it applies regardless of whether you are actually accessing memory locations greater then 4GB).

The PAE extensions allow up to a maximum of 64GB of physical memory that the CPU (not a process) can address.

PAE does not increase Linux's ability for *single* processes to see greater then 3GB of RAM (see below).

Escape75 on March 9, 2007 12:03 PM

What about dual channel mode? I have to be honest that I'm not exactly what the requirements for dual channel mode are, but would going 2x1GB and 2x512MB work properly with dual channel mode? Each channel would have 1x1GB and 1x512, so it seems like it should work...

Adam on March 9, 2007 12:04 PM

Windows XP will use 4 GB, but you have to do some tuning. You can do this as described in some Microsoft articles. Here is an example: http://support.microsoft.com/kb/291988.

My understanding is that this will allow it use "most" of it, but even then, it may appear in XP as less then 4 GB... even though it is indeed using it for "most" software applications.

Raedyn on March 9, 2007 12:15 PM

First it was the hard drive size in Windows 98, and now RAM. Microsoft doesn't plan far enough ahead.

Raedyn on March 9, 2007 12:16 PM

SO, that's why the Mac Books only sell with 3gb max from apple. Makes sense.

anon on March 9, 2007 12:22 PM

Joe: this problem does NOT exist on Linux. It's been many years since this problem was fixed in the Linux kernel. With Linux you can use at least 8GB of RAM (I believe it's 16GB, but not sure) on a 32bit architecture. And no, applications don't need to specifically support it or any of that crap. It just works right out of the box, without you having to mess with it.
So this _IS_ in fact a Windows problem. Sure, it's caused because of the architecture's 32bitness, but other OS's have worked around this for a long time.

Ludo on March 9, 2007 12:23 PM

I run Vista 64 RTM as my *primary* OS. Not in a VM, but on my Dimension 9200 with 4 GB of RAM. I must say that I am very impressed with the driver support on it. Everything works, from my GeForce 7900GS (some major glitches with the driver right after RTM, but they've been fixed now) to my soundcard (a C-Media... -- though it can't pipe mike/line-in sound directly to my speakers... WTF...).

I've had a lot of iTunes crashes (until 7.1 came out, that fixed the problem) and VMWare Server still isn't supported on my platform at all (though that's a Vista thing I believe, not a Vista 64 thing). 32 bit apps run great (you'd never know they weren't 64-bit), with the exception that Visual Studio.NET 2005 can't do edit and continue on 64-bit apps (wtf?).

Other compatibility issues: some browser plugins (Flash, I'm looking in your general direction) aren't compatible with IE7 64-bit, so I have to use IE7 in 32-bit mode most of the time. Not a big deal, though.

What I was most surprised at was the memory utilization. ALMOST ALL OF THE TIME, NO MATTER WHAT I AM DOING, over 2GB of RAM is used. I chalk a lot of this up to SuperFetch. And I must say that SuperFetch uses the memory WELL. Apps launch incredibly fast. VS.NET 2005 comes up (even with the .NET 3.0 CTP designers all installed) in about a second. So far, I've been extremely pleased. And yes, for a developer, 4+GB on a desktop with Vista is definitely worth it (especially if you also consider that apps intrinsically use more memory if they're 64-bit native).

David Markle on March 9, 2007 12:24 PM

To those claiming Linux doesn't have this problem: You're wrong. A 32-bit Linux OS will have the exact same limitations, right down the the kilobyte.

The issue has nothing to do with Windows or Vista. Vista is simply the first OS that reports the amount of *USABLE* memory, as opposed to the amount of physical memory installed. That doesn't change the fact that other 32-bit OSes can't use it either.

Yes, there's PAE - but to use PAE you need a lot of stars to align and it's just not worth it. You need a kernel that can use PAE, you need a motherboard and CPU that support it, and most of all you need applications that are compiled with PAE (and AWE on Windows) in mind.

Microsoft has all but abandoned PAE in favor of going all-out 64-bit. Also, on Windows - I'm pretty sure only the server SKUs support PAE for addressing more than 4GB of memory (even though the PAE kernel is used on XP to support DEP).


Regarding the Mac, they're in the worst position of all. There is no 64-bit Mac OS (other than the PAE-style "pretend 64-bit" of the G5 era), although Leopard is supposedly going to change that at last. But it's normal for the Mac to be behind the times technology-wise. Especially as the newcomer to the x86 world.

Brandon Paddock on March 9, 2007 12:35 PM

that is why i work on a mac. the g5 for the past 4 years gave us 64-bit memory space, worked great for us video editors, and there is no fall out between a 64-bit Mac OS X and a 32-bit. Acutally there is all this talk about dual binary (intel. ppc) for the past year but apple has been doing this since they had the G5 out there, 64-bit or 32-bit. now with the intel core duo 2s people can use more then 4GB of Ram.. 64-bit CUP and all

cheers

rob on March 9, 2007 12:42 PM

Brandon: seriously, when you're claiming the Mac is "behind the times technology-wise", you're making a total fool out of yourself (and no, I'm not a mac fanboy - I don't even own one).

Ludo on March 9, 2007 12:45 PM

The effect of using the PAE switch on 32 OSs is NOT uniform based on how many cpu's are in place. I've seen 1gb or less allocated to the OS and the remainder available for application use. When you expand beyound a single cpu, the partitioning of memory is not uniform either
the scheduler is very actively trying to spread out the load across multiple CPU's. ... Also PAE induces a translation table which degrades performance versus direct access. Memory above 4gb can only be used for db buffer space.

kev on March 9, 2007 12:57 PM

Brandon Paddock wrote "To those claiming Linux doesn't have this problem: You're wrong. A 32-bit Linux OS will have the exact same limitations, right down the the kilobyte."

But what about 64-bit Linux?

keylime on March 9, 2007 1:00 PM

Jeff:
Your math is incorrect. In both calculations, you forget to convert from bits to bytes (8 bits = 1 byte). Also, you're not considering memory paging. Without paging, x86 processors using a 32 bit address word can only access 0.5 GB of memory. See < http://spreadsheets.google.com/ccc?key=pYK6MlUiNyheNUOvbGxggNQ&hl=en_US > for the math. NOTE: Clicking the sheet names at the bottom displays different calculation sets.

FWIW, I completely agree with Ian (and others) when he says that the issue isn't quite as facile as Jeff's thesis makes it seem. Look at Mac OS X: it's (now) a 64bit kernal, but the maximum amount of RAM a MacBookPro will take is 4GB, while a MacBook will only handle 3GB. The MacPros, however, handle up to 16GB of RAM. Different chip set, same OS = different specs. Apple simply didn't include the extra hardware to allow higher memory configurations.

Jae:
x86 is a processor architecture. 'Nbit' (where N is 16, 32, 64, etc) refers to the word size a processor operates on. x86 processors began with 16bit word sizes, moved to 32 and are moving to 64.

One (very inexact) way to think about it is to say that CPUs are like internal combustion engines. They may differ in how the bits fit together, how many bits there are or even how quickly they do their jobs. But, basically, they're all pretty much alike: fuel comes in, combustion happens, piston moves, and wheels turn.

Word size can be likened to the amount of pistons an engine has; more pistons means more fuel is combusted (work is done) every cycle. Also, relevant to the above discussion, larger word size means more physical address lines are available (32 more, in this case). See above link for the math behind this.

Josh Butcher on March 9, 2007 1:09 PM

That link should've been: http://spreadsheets.google.com/ccc?key=pYK6MlUiNyheNUOvbGxggNQ&hl=en_US

Josh Butcher on March 9, 2007 1:10 PM

If your hardware is physically capable of addressing more than 4gb of RAM (this can be limited in the chipset), then you can access up to 64 gigs of RAM with Linux in 32-bit mode. Using PAE, which is invisible to applications, you just don't have to worry about system memory; if you've got it, you can use it.

However, I think there's still a 2gb limit per process, 3 if you use a special boot parameter to the kernel. You can run a lot of 2gb processes, but can't run a single 32-gig program, as far as I know.

If, of course, you have a 64-bit CPU, you can use as much RAM as you like. Programs can easily use all the RAM too, but they do have to be recompiled for 64-bit. 32-bit compiles are still limited to 2 or 3 gigs.

Linux is a pretty damn good solution, overall, but the 32 to 64-bit transition is painful on all OSes. Linux runs 32-bit code quite nicely when the kernel is 64-bit, but you can't use a 32-bit plugin, like Flash, with a 64-bit Firefox. You have to be aware of the differences and work around occasional problems.

It'll probably be least visible on the Mac. They go to great pains to hide the 32- versus 64-bit problems.

Malor on March 9, 2007 1:12 PM

Actually it is O/S issue http://www.microsoft.com/whdc/system/platform/server/PAE/PAEdrv.mspx

Shows that XP is limited to 4GB whereas Datacentre is limited to 128GB! Once you start dealing with kit in this range ($80K+) you want to have all your RAM available - (why do you want >16GB? well if you have a 20GB database and it gets hammered you want in RAM)

http://support.microsoft.com/kb/283037 describes what happens with /3gb and /pae

If you really want to see problems - check out "Desktop Heap" http://support.microsoft.com/kb/126962 & http://support.microsoft.com/default.aspx?scid=kb;EN-US;184802

The desktop heap is set on 32-Bit systems to 48MB! That's all, and on servers where processes can run as users, it's a problem. The limit is about 90 users (each starting out with 512KB used) on a box as more than this (48/.5=96) starts to hit the usage by system/service accounts. see http://support.microsoft.com/kb/169321 on how windows can start a new process in a new windows desktop

alister on March 9, 2007 1:18 PM

Very good article. I work on BIOS for a living, and I have to give this explanation to testers all the time.

Which platforms are mote likely to support remapping over 4GB ... servers. Most desktops and notebooks won't support it.

If the memory controller will support remapping memory above 4GB, then you're fine. The "memory hole" will get pushed up over 4GB. If not, then you lose that memory to all of the PCI devices on the system.

On AMD Athlon/Turion/Opteron platforms, the memory controller is in the CPU. On Intel platforms, this is the MCH/GMCH (also called a "northbridge").

spambrian on March 9, 2007 1:51 PM

I'm getting confused with all these comments, eheh. Isn't there a difference between physical memory and virtual memory? Can't the x86 architecture handle enormous amounts of virtual memory?

What I'm being taught in college is that certain memory addresses are reserved for ROM memory and I/O devices. And since the physical limit is 4GB, if you have addresses that are fixed to other devices than what we know as the RAM memory, then you won't use all those 4GB because a portion of those 4gb is not even addressable.

That's what I understand, anyway. But then I heard that there is virtual memory, but that's where those pagefiles come into play, I guess. I still don't understand it very well :P

Julius on March 9, 2007 2:26 PM

"It's the final solution, at least for the lifetime of everyone reading this blog post today."

You really want to say something like that? I remember getting a 16k expansion for my Apple II+ (cost $200 and brought me to 64k). I would bet that 64bit isn't enough to last the next 40 years, probably not the next 20.

Jiro on March 9, 2007 2:29 PM

[quote]In case you're wondering, the progression is giga, tera, peta, exa.[/quote]

Nope.
Because you are obviously talking powers of two, the progression is gibi, tebi, pebi, exbi.
(http://en.wikipedia.org/wiki/Binary_prefix#IEC_standard_prefixes)

Mihai on March 9, 2007 2:33 PM

I'm a little disappointed with my recent install of Windows Vista (32bit). I have three gigs of ram (2x1GB & 2x512mb) but BIOS and Vista only recognizes 2GB (the 2x1GB sticks). When I run applications like CPU-Z in Windows, it recognizes all four sticks. This isn't the same issue but kind of related. Wondering if anyone had any idea what was going on? I was thinking the sticks were just not compatible but I'm not positive.

raid5 on March 9, 2007 2:36 PM

"Suffice it to say that we won't be running out of physical or virtual address space on 64-bit operating systems for the forseeable future. It's the final solution, at least for the lifetime of everyone reading this blog post today"

Eh? I remember when the Mac II came out, the article in MacWorld being amazed at the vast 4 gigabyte address range addressible by its 32 bit processor and proclaiming that we'd never hit that limit. Not to mention the old (if apocryphal) 640k-should-be-enough-for-anyone chestnut. You're falling into the same trap.

Starting with 4GB, and assuming Moore's Law holds constant, we hit 8192GB in 16 and a half years. I'm 27 now, and I damn sure intend to still be alive when I'm 44.

Allan Crain on March 9, 2007 2:39 PM

Julius:
"Isn't there a difference between physical memory and virtual memory? Can't the x86 architecture handle enormous amounts of virtual memory?"

Yes and yes (depending on your definition of enormous, I suppose).

Physical memory is just that, the 'sticks' you physically plug into slots inside your computer. Virtual memory, in a nutshell, refers to the method of an OS presenting non-contiguous memory as if it were contiguous. It’s an abstraction layer. Often times this means that some of the non-contiguous memory is actually a file on the hard disk, 'swapped' into and out of RAM as it's needed.

"What I'm being taught in college..."

Sounds like they're telling you the truth. During boot-time, some peripherals are assigned memory locations that the CPU reads from/writes to. This happens dynamically now (Plug-And-Play) but in the past, folks used to have to set the memory address themselves via DIP switches. That sucked. Reassigning these memory locations during runtime isn't normally done (never, as far as I know).

"But then I heard that there is virtual memory, but that's where those pagefiles come into play, I guess."

Pages (pagefiles) may be files on disk or regions of memory or even something else (Vista lets users plug in a USB thumb drive to increase system memory). They don't *have* to be files on disk.

See http://en.wikipedia.org/wiki/Virtual_memory for more info.
See my above link for some background math.

Josh Butcher on March 9, 2007 2:49 PM

Jeff:

"> Exactly where is that magical PAE memory supposed to appear?

It'll only "appear" in apps that explicitly code to support the AWE (address windowing extensions) API, which makes use of the PAE extensions in the CPU. I don't think the base OS does this, but applications might.
"

No - PAE increases the available pool of memory in total. AWE isn't directly connected with it, though the two go together from necessity for super-huge apps on 32-bit.

<a href="http://blogs.technet.com/tristank/archive/2006/05/27/430507.aspx">http://blogs.technet.com/tristank/archive/2006/05/27/430507.aspx</a>

TristanK on March 9, 2007 3:02 PM

"Virtual memory, in a nutshell, refers to the method of an OS presenting non-contiguous memory as if it were contiguous."

Of course in practice, on 32bit Windows, you still have the problem of actually getting a contiguous memory block greater than ~1.5Gb.

Windows maps drivers and suchlike at the bottom of the virtual memory for each process, then at around 2Gb, you'll find it places system dll's! So your poor process can never actually map a contiguous block of memory > 1.5gb, even though it can access 1.5Gb + memory from the upper limit (~1Gb) using the /3Gb switch.

A _real_ pain when you're constrained to 32Bit Windows and attempting to create memory hungry processes used memory mapped files for shared mem.

http://msdn2.microsoft.com/en-gb/library/ms810613.aspx

Jamesm on March 9, 2007 3:14 PM

Jamesm:
"Of course in practice, on 32bit Windows, you still have the problem of actually getting a contiguous memory block greater than ~1.5Gb."

I didn't say the OS had to be any good at it... :)

Josh Butcher on March 9, 2007 3:19 PM

This is just like the old dos days (look at the bottom part of the diagram that shows dos compatbility memory) where you at a 1024 address space where 640k was made for ram adn 384k was reserved for mapping in the video card and other devices. the only thing thats really different now is the units of measure defining these areas.

I keep waiting to see some switch in boot.ini that says /windows=high to claim more of that reserved address space. Though when i first saw dos=high in config.sys I thought to myself..well that explains a lot

Mike Johnson on March 9, 2007 3:25 PM

Here's Microsoft's guidance on what operating systems support the 36-bit PAE extensions, and what the memory limits are for each:

http://www.microsoft.com/whdc/system/platform/server/PAE/pae_os.mspx

It hasn't been updated for Vista yet, but here are the physical memory limits from Thurrott:

Starter: 256 MB (!)
Home: 8 GB
Home Premium: 16 GB

every other edition of Vista will use as much physical memory as the hardware supports.

Jeff Atwood on March 9, 2007 3:31 PM

Ludo - I own a Mac (actually two, though one isn't in active use), and I know what I'm talking about. The Mac OS isn't 64-bit. There's some tricky mapping they do that's PAE-like on the G5 hardware, but they have some crazy limitations including the fact that only console apps are able to actually run as 64-bit process and use 64-bit addressing.

Leopard should catch things up, providing a real 64-bit OS (although I don't know for certain that the entire OS will actually be compiled as AMD64 code, as Windows is) - with the ability to write 64-bit applications and to use 64-bit memory addressing on Intel hardware.

Brandon Paddock on March 9, 2007 3:47 PM

AWE = EMS for the early Noughties :)

TristanK on March 9, 2007 3:57 PM

no.. This is a real system: [snipped]

cat /proc/meminfo

[ 16 GB RAM ]

cat /proc/cpuinfo

[ 4 Opteron 2.4 GHz dual-core CPUs ]

Dan on March 9, 2007 4:03 PM

>So if I really want everything I get out of my memory, don't I want 3x 1GB sticks, AND 1x 512MB stick?

then you loose the dual channel benefit.

>18,446,744,073,709,551K of RAM ought to be enough for anybody.

anyway since windows has a limited life..(vista is like 5 year support)

NBC on March 9, 2007 4:08 PM

That, my friends, is why Apple does not offer 4GB of RAM in laptops. Which makes me wonder how all the other manufacturers explain to the rich idiots who splurged their kilobucks on their loaded Lenovos, Toshibas and HPs, why they can't see all of their expensive RAM.

DMB on March 9, 2007 5:06 PM

If and when Adobe's new InDesign Suite goes to 64bit, then I will certainly buy a PC to take full advantage of those available features. Until then I will just continue to run at 2GB RAM.

Michael on March 9, 2007 5:30 PM

Thanks for the tip....I am in the process of planning my new rig and was about to make that mistake. The problem is that I can't afford to lose all of the programs that don't run well (or at all) on the 64 bit OS. And I hear that drivers for Vista 64 are a nightmare so I guess 3 gigs of ram it is.

----
John
http://www.monomachines.com

John on March 9, 2007 5:40 PM

@Josh,

Last I checked, the machine addresses memory in bytes, not bits...

LS on March 9, 2007 7:22 PM

@Brandon: I didn't say Apple is(n't) 64bit. I was replying to your statement saying Apple's "behind the times technology-wise" - I even said that was what I was replying to.
If any mainstream OS is behind the times technology-wise, it's obviously Microsoft's.

Ludo on March 9, 2007 7:35 PM

Well, you guys keep worrying about your need for 4GB RAM. Personally, my max RAM is 512MB, and since I run Linux, not WinDoZe, my systems run the latest software just fine with between 256 and 512MB RAM. My older Dell P3/Xeon can have 2GB RAM, but I only have 512MB, and even tho I looked at upgrading, I can't see the point. My newer Dell Xeon 2.67Ghz only has 256MB RAM, and only because I had to use 2 sticks for the dual channel memory speed. It's a server without even a GUI, so again, why do I need 4GB RAM? Oh yeah, you guys run that spy-ware, ad-ware, virus infested, buggy, full of holes and backdoors thing called WinDoZe. Well, like SpongeBob said to Plankton: Good luck with that!

I'll stick with my Linux......

Larry on March 9, 2007 10:11 PM

the real problem is that everybody keeps just going bigger with memory, meanwhile memory access time is only getting slower, not faster, instead of focusing efforts on speeding up processing power someone needs to get on top of that memory speed curve and push the limits a bit, if you could double your memory access speed you could exponentially increase the available address space for total memory because you could double-clock memory accesses. there are lots of smaller and single-purpose sdram chips that do this already, currently i'm using one because i'm designing an FPGA system with limited I/O pins and i'm sending video frames through ethernet from a submarine to a console. granted it's much more feasible because my FPGA's clocking at 50 MHz, so double-clocking the 133 MHz sdram isn't a problem, but still...anyone who wants to set a market trend, there's your place.

Ryan on March 9, 2007 10:43 PM

Moral of the story buy AMD? j/k

ryan on March 9, 2007 11:27 PM

If we were all using DEC/Compaq/HP Alpha Processors invented
by Digital Equipment Corp and runs Windows NT 64, Linux, Tru64 Unix,
VMS, etc this discussion would be moot. The Alpha world was done
clean as 64bits from the ground up, 64 bit cpu registers, cache, and
memory, file system, etc etc. Intel stole proprietary info about
the Alpha from DEC, got caught, and guess what the punishment was?
They had to make Alpha chips for DEC at LOW cost for several years
in a brand new foundry. The Alpha processor (now hanging on only by
the virtue of the endless popularity and reliability of VMS which
everything from Blockbuster Video to Wall Street to hospital systems
to .....;) is pretty much the only exciting thing to happen in hardware
IT since the VAX which was the most exciting thing since the PDP-11.
Oh well, we always take a step forward and then take 2 back and we
have Intel to blame. You'd think they would have learned *something*
from what they stole about Alpha's internals but no, we get the
Itanium and Itanium 2 abominations. All because everyone wants to
run ancient software FOREVER.

Bob Eckert on March 10, 2007 1:00 AM

What's worse is that you've got a 64-bit processor (hey, wouldn't that cover the 4GB's of RAM) and you're only running a 32-bit OS. Get a 64-bit OS and get rid of the problem, no hardware upgrade necessary.

Gabriel Smolnycki on March 10, 2007 4:38 AM

Why are you running 32-bit Windows on a 64-bit machine anyways?

Gabriel Smolnycki on March 10, 2007 4:44 AM

For those claiming that 32-bit flash will not work with 64-bit Firefox, do a search for "nspluginwrapper". I have it loaded, and I can view any flash site in 64-bit Firefox 2.0.0.1 (on Linux).

Hmm, seems like it'll only work on *nix platforms at the moment. Here's the link if you're a 64-bit Linux user and want to try this

http://gwenole.beauchesne.info/projects/nspluginwrapper/

Also check your distro, they may have this available as a package (Gentoo did).

Foxbat on March 10, 2007 5:07 AM

PL - you asked "what 64 bit chipset uses 32 bit addressing ? That is by definition not a 64 bit chipset then"

Plenty of systems ship 64-bit processors with 32-bit chipsets. So you're asking the wrong question. You're right that no 64-bit chipsets use 32-bit addressing. But that doesn't stop vendors wiring a 64-bit CPU into a 32-bit chipset. (In just the same way that the presence of a 36-bit address bus on most of the CPUs Intel has shipped since the Pentium Pro hasn't stopped vendors only providing 32-bit addressing in the chipsets.)

Matti - you said "Not really knowing what the 32-bit Windows can or can not do, probably it does not know how to use memory at above 4 GB physical address,". Not true. You've been able to use more than 4GB on 32-bit versions of the server versions of Windows for years. (Although not all editions supported it.) It was possible even back on Windows 2000. (Maybe even NT 4 - I can't remember exactly when they brought in this support.)

Incidentally, the 'double buffering' DMA issue has been with Windows since NT 3.1 - I know this because I used to write device drivers for NT back then... You had to do it for the various RISC systems (Alpha, MIPS, PPC) because most of those systems did something completely different from the x86: the physical addresses seen by the CPU were, in general, not the same as the physical addresses presented on the peripheral buses like PCI. They had a mapping layer in there of exactly the same kind that you need for a 32-bit PCI device to be able to DMA into a 64-bit address space. Drivers are supposed to use the APIs that work with this mapping layer on *all* hardware. (The exact details of the mapping layer, and whether it was even present, were dealt with by the HAL - the Hardware Abstraction Layer. On typical pre-PAE x86 hardware, the HAL would provide a 'do-nothing' mapping layer.)

Device drivers that are written correctly should just work - you don't need to do anything different to enable a device on a 32-bit bus to DMA into the higher ranges of a 64-bit physical address space. The Windows NT memory APIs have supported the necessary mechanisms since day 1, and a driver written back in, say, 1995 that used the APIs correctly should work today with >4GB on a /PAE-enabled system.

However, lazy device driver writers may have noticed that the relevant APIs for mapping from CPU physical addresses to bus-specific physical addresses are always a NOP on 32-bit x86 systems, as are the APIs for creating DMA mapping ranges. So if they decide not to bother calling the appropriate APIs those drivers will stop working when you enable /PAE. This has never been 'correct' - it's in clear violation of what the documentation tells you to do. However, it happens to work on the vast majority of x86 systems, so you just know there will be some drivers out there that do this. (I would hope that any that have been through the WHQL certification won't have this problem, but loads of drivers aren't certified.)

My understanding is that this is the issue that makes /PAE a potential non-starter even where your motherboard happens to support it. The reason switching to a 64-bit OS makes this a non-problem is that the driver writer will have had no option but to write the driver correctly, whereas if you're using 32-bit drivers, you have to hope that it was written correctly. And there are a lot of crappy drivers out there.

Ian Griffiths on March 10, 2007 8:29 AM

I have read the posts and most if not all is way above me. But is there a consensus about how much RAM the average user should get? So if I a person buys a PC or makes one, and plans on using Vista 32, they only should invest in 3 gigs of memory because anything over that won't be seen without some workarounds. Is this right?

Spike on March 10, 2007 10:46 AM

If anyone is interested, I managed to get the FULL 4GB to get recognized on my machine. Its an A8N32-SLI Deluxe and previously was only getting about 3.3GB.

1. Update bios to v1303.
2. Enable Memory Hole. (This is Important!!)

I also disabled the serial & parallel port and a few other things but I'm pretty sure thats not of much concern.

Cheers.

Sushant Bhatia on March 10, 2007 12:16 PM

An interesting article. Thanks.

I still don't own any computers with more than 512MB of ram, but me and my friend were arguing the possible benefits or myths of a 64-bit operating system just two days ago. This was very interesting.

TopHat Stuff on March 10, 2007 2:22 PM

In the interest of correcting the inaccurate information posted in this thread.


Physical Address Extensions (PAE)
Every IA32 processor since the Pentium Pro has had PAE36 allowing 64GB of memory to be physically addressed. Most AMD64/EMT64 processors have PAE40 allowing 1TB to be physically addressed however I believe the early 64bit P4s didn't.

Cacheable Area.
On many processors the address space cacheable by the processor, and therefore practically usable is less than the size of the address space. For example the old Slot 1 Celerons could only cache 512MB and PII era Slot 1 CPUs could only cache 4GB. Having a 64GB cacheable area starting in the Xeon line and migrated down.


PAE OS Support
A poster further up was correct that a 32 bit OS cannot address more than 4GB. Address is the key word here it means that each process cannot have no more than 4GB of virtual address space. Nothing says that has to map onto physical RAM below 4GB. However the original poster was correct in that device memory must be below 4GB.

Microsoft artificially limited desktop versions of Windows to only support 4GB of physical address space probably due to the issues with device driver quality. However some server versions can address more, Microsoft can very tightly control what device drivers run on systems running these versions of Windows and therefore allow the PAE suport code to be switched on.

Windows 2000 Advance Server - 8GB Physical
Windows 2000 DataCentre - 32GB Physical
Windows Server 2003 Enterprise - 32GB Physical
Windows Server 2003 DataCentre - 64GB Physical

All other versions of Windows including Windows Vista do not have the PAE code enabled and cannot access memory which has been relocated above 4GB in order to make room for device memory.

Every version of Linux since the early 2.6 kernels has supported 64GB assuming the kernel was configured for it.

Chipset Support.
Even if the OS and the CPU support PAE it still might not be possible to map the physical RAM that has had to be moved to make space for the device memory above 4GB so it can be used. Chipset support is required to make this magic happen and, especially on laptop and "value" segment chipsets this magic is not present. This is the reason the MacBook Pro cannot support more than 3GB of physical RAM but the Mac Pro (based on Xeon processors and chipsets) can.

Address Window Extensions
This is a Windows API to allow a 32 bit process to address memory outside it's 4GB virtual address space. It works by remapping memory below the 4GB barrier. It's a horrible slow hack and never really caught on. MS did it because they needed it internally for things like the 32 bit version of SQL Server and Exchange.


AMD64/EMT64
As noted above processors implementing a 64 bit x86 instruction can address 40 bits or 1TB of RAM. A 32 bit program running under a 64 bit OS can still only use 4GB of virtual address space, where as a 64 bit program can use 64GB of virtual address space. The machine is therefore capable of physically addressing less memory than the programs running on it can virtually address.

Both MacOS and Linux support running both 32 and 64 bit binaries on a 64 bit kernel with no slow down.

Windows cannot do this and requires and emulated 32 bit subsystem called WOW (Windows on Windows) which incurs a slow down. Exactly the same was done with the transition from 16 to 32 bit Windows, in that case having a 16 bit emulated system on 32 bit Windows.

Real Big Iron processors such as POWER, Alpha generally have 48 or 50 odd bits of physical address space. In fact when the Alpha was being designed a customer complained that the processsor couldn't do 64 bit physical addressing. DEC replied that if the customer was willing or order enough RAM from DEC to require the physical address space DEC would redesign the processor to support it :)


To sum up

A good idea (PAE) was hamstrung in the consumer market by lacklustre OS support from Microsoft leading to supporting hardware not being designed to be compatible with it and driver support being broken.

PAE did extremely well in the server market due to rapid OS support via Linux and the ability for third parties to fix broken drivers in this OS. As it was in constant use supporting chipsets were designed and qualified to support it. Microsoft also eventually supported it in the server market but attempted to charge a premium for it.

Chelgrian on March 10, 2007 6:30 PM

Thank you for the clarification. So the most common Windows versions (XP and Vista) actually don't support PAE to access RAM beyond the 4 GB limit, due to concerns about driver compatibility.

That explains why I only see 2 GB under XP when telling my BIOS to remap memory around the PCI "hole", even though Memtest can see all 4 GB. So PAE is really a nonstarter for most readers of this blog.

Chris Nahr on March 11, 2007 3:57 AM

This is confusing. Even the "sum up" has a few points wrong.

Enabling "PAE" means that an extra level of page tables gets used. This leads to the following changes:

- One extra level is added to the page table lookup. This can possibly make memory address slower, but usually the difference is not noticeable since the lookup is cached in TLBs.

- Data Execution Protection (DEP) is possible. Adding the extra level of page tables frees up a few bits in the page table descriptor. One of these newly freed bits is now used to mark a page as not-executable.

- Access to up to 16 GB of physical memory is possible.

- Some kernel pointers are now 64 bits.

So if you enable PAE, and your motherboard actually connects at least 33 address pins from the CPU to the memory, and your BIOS supports memory remapping, you should be able to get a full 4 GB of RAM, right?

Nope. Not if you have XP SP2 or Vista, anyway.

Notice that part about kernel pointers being 64 bits. A whole bunch of drivers don't handle that correctly. So as of XP SP2 (also in Vista), even in PAE mode, pointers are limited to 32 bits. Even though the OS and the hardware is fully capable of working with more memory, the OS never touches anything above the 4GB boundary. This was a conscious decision. Stability of the system was considered more important than access to the extra physical memory.

Doug on March 11, 2007 6:18 AM

xp and vista is no god I personaly stick whit my win 2003 server

i have sql servers whith 16 G of ram

but a guy from microsft told me that 2003 server will not work whith more then 20G of ram i have a server where ai can plug 120G of ram :D

victor on March 11, 2007 5:03 PM

"Dude .. you ate my ******* schnitzel!!!" :)

Nice post. I started my Vista usage with an x64 version but caved in and reverted to 32 Bit due to lack of software, and drivers. It's gonna get better ... but were not there yet.

Lars on March 12, 2007 1:54 AM

The annoying thing about this as a whole regardless if the memory is properly used or not is that Vista supported the /PAE switch up through Beta 2. When they released RC1 the option no longer functioned. I really wish they would have left it.

Jordan on March 12, 2007 3:08 AM

@LS:
"Last I checked, the machine addresses memory in bytes, not bits..."

Bytes are made up of bits (8 bits = 1 byte). So, "32 bit address word" is to "4 byte address word" as "1000 grams weight" is to "1 kilogram weight." Same idea.

I tend to think in bits when looking at address lines because they needn't be considered a cohesive whole (once they leave the chip, anyway). Different cognitive mapping I suppose. To each his own, right?

Josh Butcher on March 12, 2007 8:22 AM

This has been know for years. Ever since XP was released it was even noted back when I did the beta testing for it.

If you want 4gb 64 bit is the only way to go.

Evan on March 12, 2007 12:06 PM

Chelgrian wrote: "Windows cannot do this and requires and emulated 32 bit subsystem called WOW (Windows on Windows) which incurs a slow down. "

There is no "emulation" for 32 bit on x86-64 Windows!

*Any* 64bit OS offering 32bit app compatibility will require *some* parameter processing for 32bit OS API calls - whatever name you want to stick on it. However, this is a really minimal amount of work.

The performance impact for most 32bit apps is completely in the noise.

Even looking back almost 3 years at XP 64, the impact for games was in the 0-5 fps range, and this article is using a *beta* XP-64 and *beta* drivers. http://www.anandtech.com/showdoc.aspx?i=2085&p=1

[ Aside: if you're running on "Itanium" hardware, then there is a significant slowdown for 32bit apps, but that is another story entirely and applies to all OSs. ]

FYI - interesting tidbit: 32bit applications (compiled /3gb aware) running on 64bit Windows will have access to a full 4Gb of -virtual- address space.

Tom on March 12, 2007 2:23 PM

Hello everyone,
can someone explain how come a video card with 1 GB of video memory will affect RAM? I thought that the 1 GB will be dedicated to the card and it will probably save RAM and not consume it.
I am kind of confused here.

Thanks

Elie on March 12, 2007 2:45 PM

josh: "Without paging, x86 processors using a 32 bit address word can only access 0.5 GB of memory. See for the math."

You know, inside our earth there is another earth which is much larger than ours ...

baxyp on March 12, 2007 6:26 PM

ouch. thanks for writing this _after_ i bought 2 extra GB! :-)

I didn't even realise i was shortchanged 400MB. I, and alot of other people, were under the impression that hardware device addressing is on a completely separate continuum of address space altogether. Who would have expected it to be in the same physical address space as _RAM_content_.

So I have read what Micrsoft has to say on this
http://support.microsoft.com/default.aspx/kb/283037

the problem is, my server is installed with win2003 Standard edition. So not only must i first upgrade to Enterprise edition, i also have to consider possibility of hardware failure for any that may not work well with PAE? Is there some way to "test" this prior to an attempted upgrade?

Aaron Seet on March 13, 2007 12:57 AM

GOD, VISTA JUST CONSUMED A ROUGH 642MBs OF YOUR RAM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

IT'S NOT AN OS, IT'S A MONSTER.

W0lf on March 17, 2007 4:44 AM

well just a few remarks about this. first of all dos. it has no difference on memory seeing as dos only uses up to 1mb of memory as it still uses the old 16bit mode so it would not affect the limit of 4gb. also having 4gb must be better than 3. at least the resources of windows would be bigger because if ur system is using up the top part of the memory then it would do the same with 3gb of memory. maybe windows its self only registers 3gb but can detect all four because of this problem. if you had only three gb would it not then use some of that top gb for other resources.

Custom Spec Computers on March 19, 2007 6:02 AM

Do all these memory limitations apply to Windows Server 2003 Enterprise, or only to Win2k3 Standard??

Thank you, Tom

tom on March 22, 2007 6:01 PM

Tom - its a hardware problem. If you're motherboard doesn't let you see the memory then no operating system will make any difference.

Mark Levison on March 23, 2007 10:39 AM

So here is a statement of Doug Cook, developer at Microsoft.

http://blogs.msdn.com/dcook/archive/2007/03/25/who-ate-my-memory.aspx

--
Windows XP originally supported a full 4 GB of RAM. You would be limited to 3.1-3.5 GB without PAE, but if you enabled PAE on a 4 GB system with proper chipset and motherboard support, you would have access to the full 4 GB. As more people began to take advantage of this feature using commodity (read: cheapest product with the features I want) hardware, Microsoft noticed a new source of crashes and blue screens. These were traced to drivers failing to correctly handle 64-bit physical addresses. A decision was made to improve system stability at a cost of possibly wasting memory. XP SP2 introduced a change such that only the bottom 32 bits of physical memory will ever be used, even if that means some memory will not be used. (This is also the case with 32-bit editions of Vista.) While this is annoying to those who want that little bit of extra oomph, and while I would have liked a way to re-enable the memory “at my own risk”, this is probably the right decision for 99.9% of the general population of Windows users (and probably saves Dell millions in support costs). See the relevant KB article and a TechNet article for details.
http://support.microsoft.com/kb/929605/en-us
http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2mempr.mspx
--

Ralph Rakers on March 30, 2007 12:43 AM

Great article. LOTS of unnecessary nitpicking in the comments unfortunately and of course the usual wiki powered posts getting things half wrong or misunderstanding and serving only to confuse people. My only advice (take it for what it is worth) is for folks coming here to stick with the article and ignore the vast majority of the comments.

On a topic like this, you cant really just jump to wiki and expect to become an expert without having a lot of foundation knowledge and, more importantly, experience. Suffice to say that it really isnt as difficult as it may seem and that the original article is really just fine on this topic.

Ill just leave with a few points... The address width of a processor architecture does indeed determine its virtual address space. So for a processor with 32bit address support, we are talking about 2^32 or 4GB of address space. Physical address space refers to physical RAM. In the vast majority of cases, virtual space is LARGER than physical space.

There is nothing defficient in the original Windows NT 32 bit kernel and nothing "missing" that has anything to do with drivers. It is a typical 32bit OS running on 32bit hardware and, as such, it has a virtual address space of 4GB which maps to an amount of physical RAM determined by the chipset, motherboard and memory module density. As the physical RAM approaches the size of the virtual memory limit, you can have trouble if some of those addresses have been mapped for other uses. Like video RAM. Yes video RAM is dedicated on the card, but the OS has to be able to *get* to that RAM. The way that happens is that the video cards memory is mapped to a virtual address range. Its that easy. This doesnt matter until there is PHYSICAL RAM in that address range.

Any technique which circumvents the limits of a virtual address space will involve paging. Paging sucks in nearly every case. It doesnt matter that it dates back to the original IBM VM OS, was on PDP 11s, was what we lived with back in the DOS/EMS days (nitpickers please just die here rather than stating the exact first OS that paging dates back to). The fact is that the article is correct. PAE is an ugly hack that essentially allows you to page out multiple 32bit address spaces in a 36bit physical address space.

The Intel FLAT 32bit memory model (and the comment above indicating that even within 32bit space the Intel architecture is paging is a huge oversimplification of a complex topic) remains but is now augmented by a page table which can physically map to 36bit of RAM (64GB).

This IS a hardware issue and, like most hardware issues, IS present in ANY OS. So Linux and Mac fanatics, sorry, but this isnt fuel for your holy fires.

Again, GREAT concise and clear summary of a topic that, as you can see by the bulk of the comments, still causes a lot of trouble.

mlambert890 on April 6, 2007 9:23 PM

yeap, i have confirmed and posted my findings in relation to my own server hardware.

http://icelava.net/forums/ShowThread.aspx?PostID=1476

Aaron Seet on April 16, 2007 8:40 PM

I've just had the same problem:

http://digitalconsumption.com/forum/Gigabyte-GA965PDS4-with-3GB-or-4GB-RAM-Memory-Hole

Upgraded to 4gb and only seeing the benefit of half of my upgrade.

The galling thing is that I bought the motherboard because it specifically stated that it supported 8GB of RAM. Gigabyte support just told me that no memory remap function is available.

Charles Darke on April 20, 2007 5:13 AM

It doesn't matter if you have a motherboard that supports 8GB or 64GB if your OS is only 32-bit. To figure out how much memory a 32-bit OS could see, it would be 2^32 = 4294967296, which is ~4GB. Similarly with 64-bit, 2^64 = 18446744073709551616, much much more. Best bet would be to upgrade your OS to 64-bit Linux or 64-bit Vista.

BJ on April 24, 2007 7:14 AM

Great discussion, really helped me get my head round it, and i'm still not sure if i have. lol
i have an asus A8V Mobo, AMD 4200 x2, and 4gb RAM, and vista 64, if i enable "memory hole" in the bios i get to see all the ram, had to back peddle a few bios versions to achieve this without an in built by asus apparantly, USB error (put in to safe guard the system from "possible" crashes apparantly, gee thanks asus.
so i get to see all the memory, i boot to vista 64 (its definately a slower boot) vista sees all the mem to, but the nic doesn't work, no conflicts or errors, just says no cable is plugged in, and thats that.
have to admit though, i love the feel of vista 64, everything i need works with it, and even though i only see 3456mb i'm sold :)
however if anyone knows how to remap a "Marvel Yukon" NIC's addresses i'd be interested to hear about it.

Del369 on May 28, 2007 3:29 PM

Thanks for nice technical article. Had problems detecting full 4 GB RAM with my Intel DG965WH mobo. Finally got a great tip from FedoraForum.org to downgrade system BIOS downto release 1669 and that helped. Many similar reports around the net from other Intel G965 mobo users. I have heard mentioned Intel mobo models DP965LT, DG965SS,
DG965RY, DG965PZ, DG965OT, DG965MS, DG965MQ, DQ963FX, DQ963GS.

If you've that kind of mobo and system either seens only 3 GB of 4 GB total, perhaps booting up and running extremely slowly after adding memory upto 4 GB, try downgrading the system BIOS to release 1669. It's available from Intel support web under 'previous releases'. Currently the latest BIOS release is 1687 and it has the problem. Perhaps some future release will have this problem fixed.

Jussi on June 10, 2007 8:53 AM

"That, my friends, is why Apple does not offer 4GB of RAM in laptops. Which makes me wonder how all the other manufacturers explain to the rich idiots who splurged their kilobucks on their loaded Lenovos, Toshibas and HPs, why they can't see all of their expensive RAM."

Ah but they do...look at the new MacBook Pro's.

Keith Schwerin on June 10, 2007 11:39 AM

Shame on the driver writers that still write drivers that does not work with PAE!!! PAE support had existed since Windows 2000!!!!! In fact, I think PAE support should have been required to earn the Designed for Windows 2000 logo!!!!!

Yuhong Bao on June 10, 2007 12:04 PM

If all 32 bit operating systems were limited to 4 gigs of RAM I might be content, but all are not unless you are trying to tell me that my server 2003 x86 doesn't have 16 gigs of RAM and that it is lying to me in the system info pages... my xp sys info page tells me i have 4 gigs of physical RAM but the system properties reports 3 gigs... this is a microsoft limitation, period. The made their server capable of using more than 4gb so there is no reason they can't do the same for XP or Vista except that if they do, then they won't sell as many x64 copies of the OSes for those of us wanting more RAM...

Malachi on June 16, 2007 1:50 AM

Core 2 duo's are 62 bit architecture, + the only real reason for many home PC users to have more than 2gig ram at the moment is for games and then its counteracted if they havent got an old pc on which to play them on.

Finally hes wrong about GFX cards, the 1gig ram card the 8900 will be out in november in the overpriced early adopter category.

Even then doesant really matter as the intensive visual; apps and hd stuff runs through the card anyway.


John Smith on July 26, 2007 6:49 AM

Yeah, how does Windows 2003 Server support more than 3.? gigs if it is merely a 32-bit/64-bit issue?

My wild guess is that the PAE thing is implemented correctly in Server and limited in desktop platforms for sales/marketing reasons rather than technical ones.

Jason on August 6, 2007 4:42 PM

I'm probably out of my league, but when did that ever stop someone from posting.

Ignoring "holes" in the memory map...

Computers have three main buses:
Control Bus
Data Bus
Address Bus

Control Bus is 16 bits wide and tells the address bus what method of communication is required (32-bit or 48-bit)for the device currently seeking to control the data bus.

Data Bus is 64-bits wide, but typically cannot find anything to talk to wider than 32-bits other than the main processor which for most systems is also working in 32-bit mode.

Address Bus is 48-bits wide and typically operates in one of two modes: 32-bit or 48-bit. This method of operation depends on the Control Bus' instructions. 32-bit for peripheral devices. 48-bit for the main processor. In theory, 48-bit could access 2^48 addresses. (65,536 * 4GB) But, those darned peripheral chips force the control bus to limit the address bus to 32-bit or 4GB.

Peripheral devices (video card, sound card, modem, etc.) are hard coded to work in 32-bit. If your OS is 64-bit, then the drivers must be in 64-bit to ensure information sent to the peripheral device is formatted in a manner it can understand. Information from the device must be padded to 64-bit. And the control bus must be told it is still a 32-bit device. If the device is actually a 64-bit device (extremely rare) then the control bus is told it is a 64-bit device and lets the address bus do it's thing.

But, 32-bit hardware changes how the address bus works. The upper 16 bits of the address bus become a means of identifying the device, mode of communication, etc. (essentially, paging mode for these devices to allow more than 4GB of memory to be addressed) and shift data transfer to a two iteration process (slowing things down.) Vendors understand this and design to gain the speed of the processor by memory-mapping their hardware into RAM addresses so that the address bus does not shift to two step mode when sending or retrieving information to and from that device. This memory mapping reduces available RAM since the addresses cannot exist in duplicate.

Mark on August 15, 2007 8:56 AM

> My wild guess is that the PAE thing is implemented correctly in Server and limited in desktop platforms for sales/marketing reasons rather than technical ones.

Bingo :) Microsoft has pretty much abandoned PAE for the 32-bit versions of XP SP2 and Vista. Too much trouble in the consumer operating systems due to poorly written drivers.

Jeff Atwood on August 15, 2007 10:00 AM

I have a question... I bought a PC with 4 Gigs of RAM, and am planning to run it on 32-bit Win Xp or Vista (not quite sure yet), and my question is, if OS cannot see the full amount of RAM I have, will it operate smoothly with the amount it can see?

Butchy on August 18, 2007 3:55 AM

As I understand it, the debate here is between the two proposed solutions: /PAE or 64bit?

Folks, the industry is gradually moving to 64bit. So sooner or later, its gonna hump us. But until drivers are common and apps are fully compatible, just stick to 32bit with the 4gigs of ram still in there, even if the OS wont see them. It wont do the pc any harm. When the time is right you'll be ready for the switch. Its the only solution.

I use an Asus G1S Laptop: Core 2 Duo T7500, with a dedicated Nvidia 8600M GT, a Hitachi Travelstar 7k200 hard drive and Corsair 4gb ram. Vista recognises 3.4 gb of ram, but that doesnt bother me... yet.

Bah on August 21, 2007 6:29 AM

I'm running 32-bit vista on my dream computer I just got.

4GB Corsair RAM (3.4GB Recognized)
2 EVGA GeForce 8800GTX in SLI
Intel Core 2 Duo 3.0 GHz each
ASUS motherboard, I forget the model, but It will handle core 2 Quads and Core 2 Extremes (for later upgrades)as well as 8 GB RAM if I ever decide to get 64-bit vista.
Hitachi 1TB hard drive
Dual LiteOn CD/DVD +- R/RW burners.
Antec Nine Hundred Series steel computer case, 3 120mm fans, 2 80mm.
CoolerMaster 700W power supply
Saitek Backlit Gaming Keyboard
22" Widescreen Monitor, 2ms refresh
Logitec gaming mouse

All that for $2200 on newegg.com!

If you want the wish list, I still have it saved, e-mail dougthemapper@gmail.com with the subject "wish list" and I'll send it to you.

Doug on August 25, 2007 8:00 AM

Okay, I'm a little worried because you said that we are not yet to a point where it's necessary to have 2GB to run anything as of yet. Just to run Windows Vista you have to have 2GB of RAM or nothing on your computer will work correctly. You can try 1GB if you want to, but don't try running any applications with it. Not even calculator. It'll shut the system down. At the same time, you have to remember that your System Information only shows the available RAM not the total amount of RAM. By turning on your computer and running an OS, you immediately take away some of your existing RAM. It's NOT ALWAYS due to a 32-bit system not being able to see what you've brought to the table. Additionally since you had 4,096 and the 32-bit system is capable of recognizing EXACTLY that amount, it's obvious that there were other forces, like the OS and background programs, at work to take up your ability to see the full amount of RAM you had installed. Even if you had wiped the harddrive and started over from scratch, there would still be programs that installed themselves with the OS, thus taking up memory and causing you not to see the full amount of RAM installed. Isn't this true?

rugs on August 26, 2007 12:37 PM

The AMD doesn't support this. I got the biostar ta690g and they do not support this in the bios to remapped the pci resouce for above 4gb address line.

I have 4gb and if I use 64bit vista and 64bit amd cpu with pci-e 8800gts nvidia it will get blank screen system freezes and white line graphical glitch. Found out that the bios doesn't support it even I reported and researed it for AMD/ati and biostar they don't do anything. The pci bus will get memory not available 0xC0000000 - 0xFEBFFFFF and if you install 8800gts pci-e driver it will get system freeze blank screen with in mintues of use and faster if you use video or any higher function of your video card.

only way is to just use memory hole remapping to get 3gb this just cuts 1gb same as memory hole or I could of taken 1gb stick out and still see 3gb in vista 64x. WTF.

Mega on August 30, 2007 4:57 PM

@Mihai

No, he said what he ment. The use of these prefixes to denote powers of 2 has been in place since the 1960s, and no amount of linguistic revisionism will change it.

Oninoshiko on September 6, 2007 4:10 PM

What I don't understand is why MS don't simply relegate ALL PCI/AGP device memory mapping and memory mapped I/O space to a PAE'd address space page and free up another bunch of the conventional 32 bit 4G address space... Well I do understand, it's redevelopment costs. But it would alieviate much of the loss of RAM. A bit like in the old days of having device drivers written to run from XMS with a small UMB stub for backwards compatability in the old 16bit execution model x86 days.

TK on September 21, 2007 1:34 AM

i got the same problem that you have with my asus a8n32 Sli - Deluxe
i got 4.096Gb ram instaled, but for use i only have 2.800Gb
I have entered in bios and set memory hole to enable and set beats to 8. in clock i put to 200Mhz and cl to 3.
My pc recognise the 4.096Gb of memory installed and the same for use.
With windows xp pro x32 only apear 2.75Gb because is the maxim that windows xp pro x32 Suports. In Windows Vista i will test today but i think that my problem was resolved.

Peanut on September 29, 2007 1:19 PM

Great articale, I've known of the problem with using 4Gb's of RAM on a 32-bit O/S but have been looking for an articale to go in to a bit more detail.

I'm currently using Windows Vista 32-bit with 2Gb's of RAM and a Quad Core (Q6600) CPU for decoding and encoding blu-ray content (1080i) with un-comppressed PCM 6 Channel audio. However, when decoding\encoding the content the systems avalible RAM goes from 950mb's to 0mb's in a mater of seconds and everything struggles. The content it's self is dropping frames all over the place and is out of sync with the audio due to the lack of RAM; if you attempt to play it back.

So I'm to upgrading my memory to 4Gb's. Hopefully 3Gb's should just about be enough RAM in Windows Vista 32-bit, as I've used 64-bit Vista before during beta testing and had so many problems with many programs not working and a lack of driver support, I don't want to be forced back to it just yet.

I'm already running a Windows 2008 Server 64-bit and it seems to be running perfectley, but then again I don't need to run any additional 32-bit based applications on the server.

At the moment there are few people who would benifit from a 64-bit O/S, but at the rate alot of games and applications are starting to drink avalible system resources, I don't expect it'll be long before a 64-bit O/S becomes benifit for all of us.

Shaun Stokes on October 7, 2007 5:35 AM

"Personally, my max RAM is 512MB, and since I run Linux, not WinDoZe, my systems run the latest software just fine with between 256 and 512MB RAM."

Obviously this guy doesn't run Firefox...

Pete on October 7, 2007 4:13 PM

The problems here are all about EGO ... sorry chaps, but it's true. If you know anything about computers then you will know that this is an Architecture issue and the various ways that some clever people have tried to get around it. Like the king of the swingers, he has hit the top and cant got further but still wants more .... In that case create a better architecture and one that will last longer the Von Neumans ;)

Scrappy on October 13, 2007 3:34 PM

"Obviously this guy doesn't run Firefox..."

While watching youtube using firefox 2.0.0.*, 5 windows open, with a total of 32 tabs in each, as well as thunderbird, and a couple of pdf viewers,

CPU: AMD Athlon(tm) (1161.20-MHz 686-class CPU)
real memory = 536805376 (511 MB)
avail memory = 515883008 (491 MB)
72 processes: 4 running, 68 sleeping
CPU states: 61.8% user, 0.0% nice, 6.7% system, 3.0% interrupt, 28.5% idle
Mem: 313M Active, 55M Inact, 99M Wired, 25M Cache, 60M Buf, 984K Free
Swap: 686M Total, 114M Used, 572M Free, 16% Inuse

not quite linux, but close enough

I have retired my 48MB Pentium laptop, because it was getting a bit painful to use

Justin on November 8, 2007 3:24 PM

(sorry, total of 32 tabs "in each" was missed in an edit)

Justin on November 8, 2007 3:26 PM

Good commentary on the limitations of 32bit OS's - however I do disagree with one point. Installing 3gig of RAM to save some money may prohibit high performance motherboards from interleaving memory. The OS may not be able to address the extra RAM but having RAM interleaved can give much better performance than installing mismatched DIMMS.

Rich Torpey on November 8, 2007 6:08 PM

My personal experience with vista 32bit or xp 32bit no matter how much ram you have installed it will only use 2gb's worth of it. It might show up as 3.50gb. But it will actually only use 2gb. Sure you can set the BCDedit to 3072 and have it unstable so whats the point? Id rather have 2x1gb running at 1T then have 3gb running at a slower 2T rate. If you have a need for more then 2gb's of ram the wise thing to do is go to a 64bit os. Thats why they make 64bit operating systems and get yourself some nice 2x2gb sticks at 1T.

Boo on November 12, 2007 2:25 PM

From reading this, if I have Vista x32 and have 4GB installed it will still use all 4 GB but some of it will be unavailable for use by my applications because of memory mapped devices. It's still there though. The same is true if I install 3 GB. I still have the same MMD usage (directed at Tolin who has 2.6 GB shown available on his 3 GB rig). It appears that MMDs will always take space in RAM and there is no way around this. This has existed since the DOS 640K days. I'm not seeing what the problem is...

David on November 16, 2007 12:27 PM

Think of it this way:

You have a parking lot. The entrance is on the left. You're also holding a concert on the right.

Let's imagine that there are 40 rows in that parking lot. Each row, for purposes of this analogy, is 100 MB. Each row hold 100 cars (1 MB per car for purposes of this analogy--yes, this is a ****ed up lot).

On the right, you have a concert, some drunken teens, and a mosh pit taking up 6 rows (or 600 MB).

If this was a small concert, no problem. Everyone's parked on the left, the concert is on the right, and all is well.

However, if it were a sold out concert and someone made the mistake and said that 4000 spots were available, then we have problems.

What's more important: more parking, or space for the concert to go on?

So yes, 600 cars are denied parking.

This is essentially what's happening with XP and Vista 32-bit. Server 2003 seems to get around it with PAE better than XP and Vista. I have no idea why, and I'd like to find out.

In 64-bit, you have a MUCH bigger parking lot. The cars are still entering from the left and the concert is still on the right, but there is a MUCH longer walk from the entrance to the concert.

Killer B on November 24, 2007 1:51 PM

I just purchased 4 gig for my system and was researching the 4 gig usable limit when I found this.

My thoughts are this. I currently have 1 gig of ram installed, around 7 68 meg after devices get their take. Even if I have 3.8 gig when its installed I'm ok with that. Sure maybe in 2 years when the average program consumes more memory then this will be an issue. However I'm willing to say, for the life the current system I have 4 gig will be plenty. After that I'll make sure my next system 3 or 4 years from now can support more. Be it a 64bit system or what ever has evolved into the new industry standard.

o51r15 on November 28, 2007 1:20 PM

a 32 bit os can address 32 bits a second (i think thats what it means), so it can address up to 4 gigs. But some of that 4 gigs is used for your pc componets. So you would have to request alternate media from microsoft, which the request system is having problems at the moment. But I'm having the same problem as you right now, except i didn't get the extra ram yet. i have 2 gigs at the moment.

and who needs enterprise. really. get ultimate instead.

coolgamer512 on November 29, 2007 2:20 PM

From the Vista SP1 changelog:

"With SP1, Windows Vista will report the amount of system memory installed rather than report the amount of system memory available to the OS. Therefore 32-bit systems equipped with 4GB of RAM will report all 4BG in many places throughout the OS, such as the System Control Panel. However, this behavior is dependent on having a compatible BIOS, so not all users may notice this change."

(cut from www.istartedsomething.com)

Hmmmmmm....

Justin Wignall on December 12, 2007 8:25 AM

Coming in late, great post with a lot of passion.

Hey coolgamer, don't forget that that number is 32 bits (8 bits is a byte and a byte is a single character - like a, b, c, etc.) times whatever processor speed you are using: e.g.: Celeron M 1 GHz single core processor (to keep the math easy) would look like this:

32 bits * 1 GHz/second = 32 billion bits/second or 4 billion "keyboard characters"/second.

Just think of the kind of damage a QX6850 C2E (or new QX9650) can do to a pile of data! Hmmm..., theoretically 384 billion for either of those procs.

Unfortunately, there's a lot of bottle necks in front of this monster that slows the process down. These include - the FSB, Chipset, RAM and OS.

For all that have participated in this post - if you want to see 8 gig of RAM on a desktop running Vista you'll need to belly up some cash for some new hardware. If you're game..., try this on for size.

Get a mobo that has a P35 chipset or above (typically ICH9 Southbridge) - preferably X38 for gaming. Provides native addressability for 8 GB DDR2 800/1066 or 8 GB DDR3 1333 (DDR3=$$$). Pair this with the fastest C2D or C2Q/C2E processor you can afford a (read: minimum of 4 MB L2 cache) a video card that will keep up with this (like a nVidia 8800) and the fastest SATAs you can afford (any 72k/rpm 3Gb/sec drives will do) load yourself up Vista Home or above and you will see:

8 GB RAM in BIOS then, yes, in system properties you will see less. Why, cuz of most of what was discussed previously.

Windows is going to step in and take what it thinks it can get away with. This works on some sort of sliding/logrithmic scale where any day that ends in "y" it will often take more than its fair share of system resources. And, yes, all the other stuff that needs to be mapped by windows (read: operating system out of control of being in control!-), especially that darned page file, and all the other hardware devices that need a little memory fix to be happy.

However, after starting out with 8 gig you should end up somewhere in the mid 6 to low 7 gig range of available "physical" memory. You should also end up with a WEI score (Windows Experience Index) between 5.8 and 5.9 (yeah buddy!)

So, if you happen to have a few thousand dollars laying around, give it a try.

It works!

cap22020 on December 12, 2007 9:04 PM

anyone think that possibly in 10 years ram will not even been used when large capacity very fast solid state drives replace hard disk.

Barret on December 14, 2007 11:58 AM

Thanks Jeff,

Very clearly explained for a Dutch noob like me, who is just wondering which Vista to buy (32 vs 64) and how much memory - answer = 32 bit, with 3 gig Kingston. Best rgds, Berend.

Berend on December 14, 2007 12:18 PM

Read this entire post, phew !
Lots of info on this, but lots of arguments also... Nice !!!

Can someone summarise this ?

From this I can see that you should not go for 4GB or more unless you get a 64bit CPU and a 64bit OS - XP64(God forbid) or Vista and have a nice chipset, probably the latest ones from Intel - say X38. Right ?

Spec on December 21, 2007 1:57 AM

I wonder what the maximum amount of RAM is which could ever concievably be inserted into a motherboard, considering ... lets say about 2**64 atoms per gram of silicon? Something tells me that the current 64-bit architecture will eventually be replaced by quantum computers using qbits, and a typical laptop will be running with about 640 qbits of RAM (640 qbits should be enough for anybody!).

dagema on December 30, 2007 10:58 AM

In my case, XP reports physical memory of just over 3GB on my 4GB system. Can I configure the other 1GB as a Ram disk?

David on January 1, 2008 10:46 PM

wow - i've read all the comments and I'm even more confused. I liked Griffiths explanation in the above comments but i'm still clueless on what OS i should get.

I'll be getting a quad core over-clocked to say 3GHz and have 4 gigs of ram and an 8800gtx 512mb graphics card. Now i think I'll stick with a 32bit OS to avoid any present software compatibility and driver problems - but should i still consider the 64bit OS?

TJ on January 4, 2008 11:47 AM

Well here I am 8 months after the original article and the comments assuring me that "with Vista, x64 is a first-class citizen".
And guess what?

Apple's shiny new iPod Touch, a popular gift with geeks this year, supports Vista32 but doesn't support Vista64.

Quote from the current "iPod Compatibility Chart" at http://docs.info.apple.com/article.html?artnum=60971
(in light-grey smallprint in footnote 4 at the bottom of the table):
"This excludes Windows XP Tablet PC Edition, Windows XP Professional x64 Edition, and 64-bit editions of Windows Vista."

Shame they didn't mention this little detail on the iPod Touch tech specs page.
Looks like Vista64 is turning out to be a second-class citizen again.

GrahamStw on January 8, 2008 8:03 AM

Only problem is, some people may have the an older DDR dual channel chipset board like I do, and if they install only 3 GB of memory (say, 3 sticks of 1 GB each), then they lose the benefit of dual channel memory bandwidth performance. That's why I went with 4 1GB sticks, even though Vista and XP only sees around 3.25 GB. I wanted the the dual channel performance boost, and that 4th stick acts as a "place holder" to guarantee that those other 3 sticks run at full DDR dual channel bandwidth. Hey, without it, an odd number of sticks runs at 1GB/second slower! Anyway, at least Vista & XP both see 3GB + 256MB, (3.25 GB) so that last 4th stick is not a total loss.

Trevor08 on January 20, 2008 11:57 AM

well this is a lengthy thread indeed and people still posting, still confused. There are posters speaking in very authoritative tones on the inability of any 32bit OS to address > 4GB of RAM, yet all OS vendors claiming they do in some or all releases, and servers out there with > 4GB RAM running as we speak, on 32 bit OS, believe who you will.

*BUT* Is not this whole discussion forgetting one important aspect of modern processors? More than one core, or multi-cpu machines, is this the actual answer to servers getting more than 4GB addressed?

bascule on January 22, 2008 7:35 PM

Very nice -

For the common man, get 32 bit and 4gigs and let the "pros" haggle
with what they will. RAM is cheap and 2x512 is @ same $ as 2x1024

One thing, from my readings it looks like people are saying that
the "system" (buses..etc) are using the non-appearing ram and what
you see left is for the OS/Apps. So, wouldn't that mean that the
"whole" of the ram(4096) is actually being used, you just can't see it?

onepair on January 28, 2008 10:15 AM

A niche group of people newly discovering this genre of problems have done so as a result of comparing their Windows Experience scores generated by Vista. Discovering my machine’s memory is reported below 4GB has indeed given me the necessary knowledge of and motivation to research the phenomenon. After discovering the cause, I do not regret acquiring the inexpensive 4(1 GB) sticks.

My logic is this:

Windows Kernel, from what I have read, likes to take roughly half of my ~4 GB of memory for itself, leaving the other two for applications. What would happen with only 2 GB total memory available? Would our dear Kernel still requisition half for itself, leaving only 1 GB for applications? If this is the case, I would feel better having a full 2 GB available for applications (I game as a side to working with Photoshop, databases, and AutoCAD).

If my logic is misguided or naïve, please post a response to educate me on the fallout of such a scenario.

Regardless, with a 640 MB video card installed, I would rather have as much memory available for it to map into and still have sufficient space left for the OS and applications.

If people are getting hung up over the mere reporting scheme Microsoft’s OSs use to report available memory, well, Microsoft has heard them.

“With SP1, Windows Vista will report the amount of system memory installed rather than report the amount of system memory available to the OS. Therefore 32-bit systems equipped with 4GB of RAM will report all 4GB in many places throughout the OS, such as the System Control Panel. However, this behavior is dependent on having a compatible BIOS, so not all users may notice this change. “

(http://technet2.microsoft.com/windowsvista/en/library/005f921e-f706-401e-abb5-eec42ea0a03e1033.mspx?mfr=true)

Ian Westerfield on January 28, 2008 8:40 PM

Onepair –

From what I have gathered, you are correct. From a Microsoft KB article I cannot cite at the moment, a 256MB video card will take as much off the top of installed physical memory. To the loss are added other sub-OS system functions such as PCI device overheads.

Read my post directly above for my concern: if a system has only 2GB installed, for example, will the Kernel still take a half for itself, on top of what was taken out by before the OS got involved?

Ian Westerfield on January 28, 2008 8:49 PM

Bascule –
From what I have read, a server accessing over 4GB of physical memory has nothing to do with its processor count, but instead with how its OS handles PAE and, ultimately, hardware-enforced DEP.

From Microsoft MSDN Library’s Memory Limits for Windows Releases (http://msdn2.microsoft.com/en-us/library/aa366778.aspx): Every 32-bit Server release is capable of using >4GB, save for: Server 2008 Standard; Web Server 2008; Storage Server 2003; Server 2003 R2, Standard Edition; Server 2003, Standard Edition SP1; Server 2003, Standard Edition; Server 2003, Web Edition; and SBS 2003.

None of those systems are allowing >4GB with the stipulation of multiple processors (or processor cores). However, a few systems are listed (probably other beyond those listed) as capped at eight total processors (I’m assuming 8 actual processor chips, not cores).

(Microsoft, http://www.microsoft.com/whdc/system/platform/server/PAE/pae_os.mspx)

Ian Westerfield on January 28, 2008 9:06 PM

Before I try this I thought I would ask a couple of questions (before we start...I am NO guru when it comes to computers, so bear with me please).

1. I run Vista64 with a total of 8GB, shows 3.83GB. Total VM of 9.58Gb, shows 5.94GB.

2. I'm trying to run Autodesk Inventor (32) and have a large assembly that "dumps" in the (roughly) 4GB area. I imagine I'm hitting the 4GB "limit".

3. I've seen where adding /PAE will get me the full 4GB, but what about the other 4GB above that. Will I ever be able to access the full 8GB with Inventor?

Sorry for any "stupidity" on this, but I'm on a "non-supported" machine at the company I work for...so I'm the IT guy for this (and yes, we're in trouble).

Thanks

Jim on February 4, 2008 1:06 PM

Jim -

If you are running an x64 version of Vista, it should be expressing the availability of the 8GB (minus anything mapped into memory before the OS). Granted, what is mapped should be far less than 1 GB. What are some other components in your system (i.e. any GPU devices with large amounts of memory)? I will be in a position this Friday to see if my 640MB GPU will actually map 640MB into memory on boot, so I will know more about this possibility then.

Autodesk programs I believe are all multi-threaded with support for well over 8GB of RAM, so there should be no problems rooted in your application.

Again, if you are running any 64-bit OS, you should have access to your memory with no special boot options/switches (such as Physical Address Extension).

Step 1) Reconfirm your OS is truly 64-bit.

Step 2) Determine if your computer is mapping large video memory into system memory (if you have any big cards locally on your machine).

Ian Westerfield on February 5, 2008 7:39 PM

A very useful post. But I think if you want to map physical memory directly, prevent system paging your application memory to disk, or require more memory on 32-bit windows system, you can try to use AWE (address windowing extensions) API.

Catherine Sea on February 15, 2008 6:31 PM

i have found a way for windows vista 32bit to see all 4 gb ram contact me on msn at ianshinobi@hotmail.com i can explain on how you might fix the problem

idouglas on February 17, 2008 2:43 AM

Quick question-

I believe most of the applications present today max out at a total of 2GB. Now can Win XP or Vista (32bit editions) utilise the full 3-3.5GB or will it too be limited to 2GB.

Rig I'm planning to build-
Intel QuadCore E6600
Gigabyte X38-DQ6
nVidia 8500 GT\GTS (256-312MB)
2 x 500GB SATAII (8MB Cache)
3 x 320GB SATAI (4-8MB Cache)
1 x 250GB SATAI (4MB Cache)
SATA DVDRW
Creative X-Fi Sound Card

Do advice

rookiebot on February 21, 2008 6:10 AM

más? Dude. Speak (International) English when your allowed to go out in public!

MSP on February 23, 2008 1:39 AM

más? Dude. Speak (International) English when you're (sorry about the typo) allowed to go out in public!

MSP on February 23, 2008 1:41 AM

"The proper solution to this whole conundrum is to use a 64-bit operating system." Why go so far over the top? A 33-bit operating system would solve the problem by giving you twice the addressing power of a 32-bit system. Why do we need 4,294,967,296 times the address space? Don't tell me that we doubled it in going from 16 to 32 or that 33, 34 or 35 are odd numbers. There is no implementation problem with coping with 33, 34 or 35 bits. These are exponents we are talking about dude! There is no comparison in practical terms between doubling from 16-bits to 32-bits and in going from 32-bits to 64-bits. In 16-bit days it was always on the cards that 32-bits worth of physical RAM might be possible. 64-bits worth of physical RAM? Not for a very very long time if at all.

MSP on February 23, 2008 1:55 AM

I run Pro Audio apps and don't play games. So let's say I were shopping for a new computer. It seems like it would make the most sense to stick with a graphics card that had the least amount of RAM and still drive my display - thereby saving system RAM. If I can get an extra .4 gigs for the system I'll take it!

mozrx on February 25, 2008 7:56 PM

how come nobody tells you this bullshit before buying ?
why can we not sue motherboard manufacturers who write "up to 4gigs of ddr" ? it's like buying a car advertised for having a 200kg tank, but 50kg are for air suction.
guess what none of the sellers I spoke to new about the 32 bit shit.
besides what is the point of ddr2, 3 or 4 with 2 or 4 gigs per memory when your computer won't see it?

cosmin on February 26, 2008 12:47 AM

The whole 32 versus 64bit controversy is mute when it comes to memory addressing. If the hardware supports more memory, the only limitation is the OS. Linux 32-bit can use over 4GB and Windows 32-bit cannot. It is that simple. Add in whatever modified math from the 486 days you wish, when it comes down to it, it is based on the OS if the hardware is capable. Motherboard manufacturers have built in many of the PAE type I/O switches needed to make this possible. Make as much of the memory available to the OS as is installed, regardless if it is 32 or 64-bit.
I have a tri-boot system with a Core2Duo: 32bit XP, 64bit Vista and 32bit Fedora Core7 with 8GB of memory in this system. XP sees 3.5GB, Vista sees 7.5GB and Fedora sees all 8GB. I have enabled PAE in XP and it still only sees max 3.95GB, enabling PAE in Vista does nothing to get the other 512MB and no PAE switches or kernel modes needed with any linux kernel that is 2.4 or newer... although the 2.6.X kernels have much better support for memory over 4GB without a performance hit. Some specific distros may have their own personal issues with 32bit and 4GB+ of memory but the rest of the linux community has already fixed it.

bigmike on February 26, 2008 10:02 AM

Wow! (and no, not "windows on windows") Long and interesting thread with so many, "to sum it up"...
"so from what I gather"...
"just finished reading this"...
"it's the hardware"
"it's the OS"
"windows sucks"
"Linux rules"
"strictly a hardware issue"
"very interesting, but..."
"my logic is this..."
"I'm no genius"
MB, GB, Ram, PAE, ....

And now to summarize:

ATWWID

And they wonder why I drink!

Good Job!

DrCake on March 1, 2008 1:07 AM

What does the "x" in "x64" stand for?

Lawrence D'Oliveiro on March 5, 2008 3:04 AM

x86 is the generic name for Intel processors released after the original 8086 processor. These include the 286, 386, 486, and 586 processors. As you can see, the "x" in x86 stands for a range of possible numbers. Technically, x86 is short for 80x86 since the full names of the processors are actually 80286, 80386, 80486, and 80586. The "80" is typically truncated to avoid redundancy.

http://answers.yahoo.com/question/index?qid=20080110064759AAobnrX

onepair on March 12, 2008 9:34 AM

I am an "indy" publisher of PC games from Japan (well, dating-sims if you must know), and I am floored by this ridiculous limitation of Windows. Our games don't run all that well in 64 bit Vista and XP and we probably can't upgrade at any time in the future, at least our older games. So is there *no* option like Wine that runs the 32 bit virtual machine inside the 64 computer? What did Apple do right that all their programs "just work" in my Mac Pro with 9 GB?

Peter Payne on March 13, 2008 8:37 PM

What Apple did right is simply brute force the change. If Microsoft had said "Vista will NOT be compatible with early windows, get used to it or get stuffed!" and made it 64bit only and forced it, we'd not be in half the grief we are now.

It worked for apple, and they did it TWICE (motorola -> powerpc and powerpc -> intel)

dmx on March 17, 2008 12:48 AM

Microsoft has about 20x the market share as Apple. The reason is, they go out of their way to not break stuff when they upgrade their OS. This keeps businesses happy because they don't have to spend effort to upgrade their software for each OS. This helps Microsoft sell more copies of Windows because instead of Businesses saying, "Well our software won't work anyways on the new version of Windows, let's evaluate switching over to Apple."

You evaluation of Apple doing it "right" is from a Aesthetics stand point. Microsoft got it right in the business sense. This is evident by the market share.

Brian on March 17, 2008 5:13 AM

Vista's new Service Pack 1 now allows for the display of all 4 GB (or other higher amounts) of RAM installed now, even if Windows isn't using all of it.

Preston on March 19, 2008 2:24 AM

cool... so the following choices are available...
1: buy 4 gig for a 32 bit OS and only be able to take advantage of 3 of them
2: buy 64 bit OS as well and STILL only be able to use 3 gig of your RAM
3: buy vista, and NEED 1 gig extra just to run the blasted OS so you STILL only get 3 gig available.

I checked the M$ definitions ... what a masterful piece of spin wording they have. Well done M$ - another fantastic rear-ender for the general public. Technically I'd call it lies, but then, I don't work in the word of advertising. I live in the real world.

Roll on a fully functional Windows environment within a Linux system.

Slaine on March 20, 2008 4:43 PM

typo
2: buy 64 bit OS as well and then find there are no drivers available so everything runs slow and in 32 bit mode. See the full 4 gig, but be unable to use the modem, network card, graphix or sound to full potential etc etc...... you get the idea.

Slaine on March 20, 2008 4:47 PM

I have the feeling the last 2 posters have never used Vista x64.

Keith Schwerin on March 20, 2008 5:23 PM

Despite the Windows address space limitations, would it still make sense to use 4GB Ram on Windows XP Pro if one plans to create a Ram Disk? Can such a "vrtual" drive somehow take advantage of the "missing" space invisible to the operating system itself?

Bill on March 21, 2008 11:56 PM

No, it's not a hardware problem, its a Windows problem.

You knuckleheads can keep on bleating that it is hardware, but with Linux, my 32-bit OS kernel can use 4GB, even if processes can only address up to 3GB. So I can happily use all of my memory, since I don't run processes that need more than 3GB.

Windows does not let me do this.

How is this a fault of the hardware? It's not.

It's a fault of Windows, a shortcoming of Windows, a flaw in 32 bit Windows, a compromise Microsoft decided to make in Windows. So it's Windows that is broken. Windows.

Clear yet? Don't blame the hardware Windows being hamstrung.

JamesW on March 23, 2008 2:28 PM

i haev 3Gigs system ram adn 1 Gig bideo card video ram detected in windows xp home 1024.0 system ram 3gb when i install the 4th gig of system ram its not detected at all.

Robert on March 25, 2008 9:31 AM

It is simple math. think in base-2 (binary) with the 'bit' being the exponent. the base is, of course, 2, the 32-bit would make it 2^32, calculate that and you get how many BITS a 32-BIT computer can address. How can you blame microsoft for not making their 32-bit OS able to bend the laws of mathemathcs and change the answer to 2^32 just so you can use more than 4GB of ram? just like our eyes cannot see more than 3 dimension, a 32-bit OS cannot see more than 4GB of RAM. Upgrade to x64, and computers will continue to evolve. Dont, and 5 generations of Windows OSs down the road, we will have terahertz CPUs, 18 GPUs, 20.1 surround sound, 18TB of hard drives, and 4GB of ram.

Snugg on April 11, 2008 9:18 PM

JamesW, nice try at making *nix sound far superior...


But the fact of the matter is..

PAE is not Manufacturer or developer specific issue, (PAE)Physical Address Extension is a _solution_ to a hardware-centric problem.

Yes,some Linux(2.6 an above), FreeBSD, Solaris and others support PAE out of the box. But, this does not guarantee compatibility with firmware, drivers, or software packages--it simply means the kernel and some software running on 32bit processors can address 4GB+. Which is why you'll find many more power *nix users running 64bit OS's, and not a 32bit OS with PAE--as long as their hardware supports 64bit, and they need the extra RAM.

Windows had a PAE-type solution in the AWE mechanism mentioned in the article. However, it would seem that Microsoft is no longer interested in applying a band-aid to the problem, and instead will likely switch gears--or so the "interweb" rumors say, about Windows7--to push 64bit OS's on launch day. Even though, at least 4 or 5 32bit Windows versions support PAE...

!BUT! The fact still remains that, for any PAE fix to work, the environment must also have the right(PAE supported) hardware and software; that includes CPU, OS, firmware, middleware, et al.

Okeif on April 12, 2008 7:36 AM

I know this thread is old but I just wanted to address (pun not intended) the comments on 2^32 addressable BITS or 0.5GB addressable memory.

PC memory is BYTE-addressable, so 32-bits is 2^32 addressable BYTES or 4GB, no "unsound math" involved.

SteveG on April 13, 2008 6:32 AM

I see alot of negative comments about 64bits XP here, and I want to counter them.

I've run 64bits xp for 6 months no without any trouble what so ever. The only problem I could see happening is that you can't find drivers for obscure hardware, but for everything else it's just great ;)

so if you want to use more than 3-3,5gb ram, get 64bits xp ;)
I've used it with 6gb and it's no problem :D

fendel on April 24, 2008 3:51 AM

2 much .....

Mark on April 28, 2008 6:54 AM

A 64-bit PC running a 64-bit OS has a truly vast basic memory address space. The 4Gb 32-bit address space was 4096 times the size of the 1Mb 20-bit space, but the 64-bit address space is 4,294,967,296 times the size of the 32-bit one.

(Actual 64-bit PCs so far aren't actually able to address anything like that much memory, for reasons analogous to the restricted addressing of the old 8086; essentially, fewer memory address lines make for a cheaper computer. But even the most restrictive current x86-64 computer and operating system combinations can still address at least 2 to the power of 44 bits, which is 16,384 gigabytes. That ought to be enough for quite a while.)

By default, an all-64-bit PC will still have the standard big holes in its memory from three to four gigabytes. This is the lowest-hassle way to deal with the problem - just install more than 4Gb of memory, and live with the fact that your 8Gb PC with a 768Mb graphics card only actually has seven-point-not-much gigabytes of visible RAM.

One advantage of this is that you can still boot a 32-bit OS, if you want to. Another is that this vanilla configuration is most likely to actually work. Cleverer memory configurations aren't necessarily properly supported by hardware, operating systems and device drivers yet.

If you don't care about these factors, though, there are two ways to get the lost memory back.

Some 64-bit motherboards these days give you an option for "memory hole remapping". That moves the fourth-gigabyte MMIO memory holes higher into the 64-bit address space, probably way above the maximum RAM you can physically install.

Many other 64-bit boards, though, are even smarter, and can leave the memory holes where they are and remap (at least some of) the physical RAM out from under the holes and up past 4Gb. This process is often entertainingly referred to as "memory hoisting", and it used to be the preserve of server motherboards. It's been showing up in more and more desktop mobos, though. And on some of them, the memory-hoisting BIOS setting even works, and doesn't horribly crash the system as soon as something tries to use the remapped RAM.

You may only be able to "hoist" the last 512Mb of the 4Gb address space, but that's better than nothing. If it works.

I should add a note about the /3GB, /4GT and /PAE Windows boot.ini switches, too, because they often come up when people are talking about 4Gb-plus Windows PCs.

They are all useless to you. You do not want them.

/3GB and /4GT are config settings for different versions of Windows that tell the operating system to change the partitioning of the 4Gb 32-bit address space so that applications can use 3Gb and the OS kernel only 1Gb, as opposed to the standard 2Gb-each arrangement. They don't help at all with the 3Gb barrier, and most applications don't even notice them, so desktop users lose kernel memory space (and system performance) for no actual gain at all.

The /PAE boot.ini switch, on NT-descended Windows flavours, activates the Physical Address Extension mode that's existed in every PC CPU since the Pentium Pro. That mode cranks the address space up to 64 gigabytes (two to the power of 36), and the computer can then give a 4Gb addressing block within that space - or even more, with extra tricks - to each of several applications.

PAE's no good to the everyday 3Gb-problem-afflicted user, though, for two reasons.

First, it presents 64-bit addresses to drivers, and thus causes exactly the same compatibility problems as a proper 64-bit operating system, except worse, because now you need PAE-aware drivers for 32-bit Windows, instead of just plain 64-bit drivers for a 64-bit OS. From a normal user's point of view, PAE gives you the incompatibility of a 64-bit operating system when you're still running a 32-bit OS.

For this reason, Microsoft changed the behaviour of the /PAE option in almost all versions of WinXP as of Service Pack 2. They fixed the endless driver problems by, essentially, making /PAE in XP not do anything. All versions of WinXP except for the x64 Edition now have a hard 4Gb addressing limit, no matter what hardware you use them on and what configuration you choose.

This isn't a big problem, of course, since XP is not meant to be a server operating system. But it's still mystifying to people who try the /PAE flag and can't figure out why it doesn't work.

Oh, and just in case you for some reason still wanted to try PAE: It eats CPU time, too.

sacha on April 28, 2008 1:49 PM

First great discussion! But couldn`t find any comment about this:

My friend told me that i need more than 4 GB RAM to use a 64-bit system at full speed. If I had less it would cut down my performance. Is that true? (He says that the 64 bit key would not fit completely into the ram???)

AMD Turion64 X2
2 GB RAM
Linux 2.6.22.17-0.1-default

Sorry for my bad english but i am from germany

Peter on April 28, 2008 2:46 PM

Quote:
> My friend told me that i need more than 4 GB RAM to use a 64-bit
> system at full speed. If I had less it would cut down my
> performance. Is that true? (He says that the 64 bit key would not
> fit completely into the ram???)

He's talking nonsense - or does he sell memory?

I run Vista x64 on an Intel Q6600 with 4GB ram. It's fast and responsive, despite running Visual Studio 2008 and MS SQL Server on the same box. 4GB is fine for most x64 users.

Quango on April 29, 2008 7:45 AM

I just built a gaming computer, its got the XP 32bit(didnt want vista atm) and 4 gbs of ram, and it only reads three, but then my wife's computer is a year or two old Dell and I bought 4 gigs of ram for it as an upgrade and it reads it all 4gb of ram, it also is 32 bit XP, what's the deal?

Michael on May 6, 2008 10:09 AM

"In any 32-bit operating system, the virtual address space is limited"

The virtual address space has nothing to do with it. Windows is operating in paging mode, and thus there is no direct relation between the virtual and physical address space. True, the virtual address space is fixed at 4GB, but the physical address space can grow way larger.


"Addressing more than 4 GB of memory is possible in a 32-bit operating system, but it takes nasty hardware hacks like 36-bit PAE extensions in the CPU, together with nasty software hacks like the AWE API"

PAE is not a "hack". It is just a way to extend the page table. Most people today uses PAE in XP and Vista, because they want DEP. By the way, check out the structure of the page table in 64bit mode.


"OK, so we're limited to 4,096 megabytes of virtual address space on a 32-bit operating system"

As I stated above, the virtual address space has nothing to do with how much physical memory (RAM and MMIO) a 32bit x86 OS can address.


"To be perfectly clear, this isn't a Windows problem-- it's an x86 hardware problem."

On modern hardware that is not true. It is a hardcoded limitation in the memory manager in 32bit Windows XP/SP2 and Vista.

hamster on May 13, 2008 6:43 AM

Oh, and a note on AWE. AWE is NOT PAE. You can use the AWE API if your application needs to access more physical ram that can be expressed in the 2/3GB "user space" portion of the virtual address space.

AWE can also be used without PAE.

hamster on May 13, 2008 7:07 AM

i am givving this up to long to read

Abduhha Moehached on May 18, 2008 9:36 AM

Well, I installed 64bit XP after upgrading to 4gig of ram (and needing to reinstall windows anyway)... It lasted a week.

I am a designer and Adobe's PDF Creater wouldnt work because its a 32bit printer driver, and to top that the printer service constantly crashed.

What mainly annoyed me was WinXP 64bit wasnt supported by Windows Live Messenger, the latest installer from messenger.msn.com wouldnt install it... Another great FAIL by Microsoft.. "We will release an OS and not have any of our free software support it".... Fantastic!

Back to WinXP 32bit with 3gig of ram - The only Viable OS at this moment in time.

And Vista? Vista is the Captain of the Failboat

Adam on May 22, 2008 5:52 AM

Yo ho ho and a bottle of suck.

Me on May 25, 2008 2:25 PM

erm.. shouldn't that be 16 exabytes of addressable memory using 64-bit. The division by 8 is unnecessary, since all memory since basically the beginning of time has been byte-addressable, not bit-addressable.
</pedant>

Matt Johnson on May 25, 2008 3:05 PM

Geez, this gets more confusing the more I read about it. I thought the 4GB limit was a Windows problem. According to wikipedia, the PAE is enabled in XP Pro SP2. It has to be enabled so XP can use DAP. So if PAE is enabled, why doesn't XP have access to more than 4GB? According to wikipedia, the limit is set to 4GB because of driver compatibility issues. Now I see people blaming it on the chipset?

I use my system for gaming. I was going to install 2x2GB for my XP Pro SP2 system when I found out about this problem. Should I get X64, Linux, or use PAE? I don't know how to use PAE and I can't find instructions with Google. Thanks.

Locutus on May 27, 2008 5:16 PM

Locutus;

Your first impulse is correct. For gameing you
need XP. The added ram will work without doing
anything; Do not trouble your head.

Cheers

ratsarsed on June 6, 2008 1:41 AM

EDIT 4 gig works fine.

ratsarsed on June 6, 2008 1:46 AM

I rue the day when I am forced to deal with Vista in any x version divisible by 2. Regardless of how much it may have progressed in reliability,stability,dependability, ..*ibility... I still dispise it... All those nice colors and inviting graphics... It's evil!!! When that M$ Storm comes a-blowing full force, I'll be hugging my XP box in tears.

Don't think I'll have to worry too much about that Fedora 8 bastard in the corner though. I prefer to just let him think that 512 is all the memory in the world. Keep him humble for his own good.

My other computer is a Beowulf cluster

Want to be a great man? Do something great.
Want to be a great man remembered? Do something great and pick your nose on national television.

Errk on June 17, 2008 1:47 AM

Vista sucks big time. I went to Fry's to get 4 gigs of RAM. And the support guy advised against it. He said the 3.4 gig limit thing is real and with 32 bit OS it's no use putting in more than 3 gigs. I guess, bottom line is with current state of technology and M$ wisdom, we are stuck with 4GB at most and curse M$ while we are at it. I just don't understand what M$ thinks about its customers. They are the biggest con artist on the planet. Vista Sucks!

VistaSufferer on June 17, 2008 1:57 AM

I have just bought a HP Pavillion notebook, Intel core 2 duo 2.1, Vista. On the box it is written very clearly - 4GB RAM. I went to check the System if it prints also the same amount, umm 3020MB RAM. Could be better a MacBook, at least would show exact RAM.

Raja Shahed on June 17, 2008 6:49 AM

I have a Core 2 Processor 3 GHz, 4 gb of ram, a video card Geforce 8400gs, the Motherboard suports processes up to 4 gb, two sata hard disk and two dvd-rom rw, i'm a Graphic Designer (AutoCad, Adobe Illustrator CS3, etc) and a passionate gamer. I want to use as much as possible the RAM, i've read all the discussion and still wondering which OS i should use. Please, ¿Vita 32 bits? or ¿xp 32 bits?... The RAM not used, will affect the PC in a negative way? and if so ¿how?Thanks.

P. D: Sorry, my english is rusty. I’m from South America

ghost on June 18, 2008 11:20 PM

I have a Core 2 Quad with 2x2GB of RAM (4GB Total). I'm using Windows Vista Ultimate (32-bit). When I go to Computer Properties, It says "Memory (RAM): 4.00 GB" -- so it's recognizing all of the RAM there. However, when I go to Task Manager Performance tab, it says I have 1533 MB of Physical Memory (less than 1/2)!!!

I also have Windows Virtual Server 2005 on this machine, and when I go to server properties it is *also* reporting only 1533 MB of RAM!

I'm inclined to believe that Vista is only using 1533 MB of my 4GB of RAM because Task Manager constantly shows my Physical Memory usage at 85% and higher.

Anyone seen this or have any idea how I can get Vista to recognize/use all of my 4GB of RAM?!?

Heartsbane on June 21, 2008 11:54 AM

people any one out there PLEASE HELP ME

i have intel Pentium D - 955x at 3.4 Ghz
GeForce 9800 GX2 ( Black Edition )
4 x 1 GB ram 667
Windows Vista Ultimate 32-Bit

my PC is telling me i only have ( 1790 MB of RAM )
befor i instaled the GX2 i had ( 1500 MB of RAM )

what the (F) is going on here
i tried messing around in the BIOS still nothing
i checked the GX2 and nothing there
can any one tell me what is going on or what can i do to fix this problem

in my BIOS this is what i see concerning my Memory

Bass memory 640-k
Extended memory 4192256-k
Total memory 4193280-k

HELP

axel on June 30, 2008 2:06 PM

Switching to 64bit doesn't necessarily mean you get more RAM. Well, it does, but you also use more RAM. 64 bit address space means 64 bit pointers, so your pointers are now twice as large, which means your applications will use more memory. I'm a Java developer, Java applications use on average 30-40% more memory on 64 bit JVMs than on 32 bit JVMs. So, if you had 3GB of RAM, and upgraded to 4GB, and switched to a 64 bit operating system, you would actually end up in a worse off situation. So until I need > 64GB of RAM, or > 4GB of virtual address space for a single application, I'm sticking to 32 bit.

James Roper on July 9, 2008 12:28 AM

hmm... Mores law...
About 30years ago 640kb was enough for everyone.
Shouldn't that mean that the 64bit addressing range will be full in 15 years? no wait.. ^20.. =10 years?

d-sier on July 17, 2008 1:39 PM

Moore's law is an exponential law...adding a bit is an exponential increase.

640 KB is addressable by 20 bits.

Right now we're at the edge of 32 bits, so we've added 12 bits in 30 years.

To add another 32 (to reach 64) would then take (30 years)*(32/12) = 80 years assuming exponential increase.

Sumudu on July 17, 2008 2:04 PM

Mark Russinovich has put together a much deeper answer to this question. A great read:

http://blogs.technet.com/markrussinovich/archive/2008/07/21/3092070.aspx

Bryan on July 27, 2008 11:41 AM

hello everyone

johnson on August 23, 2008 6:07 PM

AppleInsider has a good rundown on how Mac OS X and Windows compare (and a historical overview of memory addressing) in "Road to Mac OS X 10.6 Snow Leopard: 64-Bits" at:

http://www.appleinsider.com/articles/08/08/26/road_to_mac_os_x_10_6_snow_leopard_64_bits.html

DanielEran on August 26, 2008 12:51 PM

Appleinsider for a comparison? How stupid is that? Mac OSx in 64-bits has been shown to not be FULLY 64-bit. So this article is wrong.

Also, folks, the 4 gig limit is not an OS problem. It's a hardware design problem. The addressing ability of the CPU and chipsets have most always supported only 4 gig in 32 bits processing modes. Please for God's sake, get a clue!

Narg on August 27, 2008 5:51 AM

Also, folks, your OS IS accessing all 4 gig. 4 gig of addressing space, not 4 gig of memory. The CPU and chipset have to access the memory for all devices in your systems. That includes the memory for controllers, ports, and video cards. If you put a 512 megabyte video card in your system, that will eat up 1/2 a gig of memory space, reducing the amount of RAM available to the OS, ANY OS that runs in 32-bit space.

Microsoft recently went the way that Apple did. The OS now reports how much ram is in the system, no matter how much of it can be used or not. Happy now, idiots? You forced these companies to LIE!

And the 640K limit was 20 years ago, not 30. And it too was a hardware enforced limit, not OS caused. Gees!

Narg on August 27, 2008 5:55 AM

Here's the real dirt:

This is wrong: "As far as 32-bit Vista is concerned, the world ends at 4,096 megabytes"... "the Windows memory manager is limited to a 4 GB physical address space. Most of that address space is filled with RAM, but not all of it. Memory-mapped devices (such as your video card) will use some of that physical address space, as will the BIOS ROMs. "


The problem is not in Windows memory manager, it's in the hardware. Since the design of 32-bit based systems, the addressing ability of the majority of these systems was 4 gigabyte. Basically that all the physical space that was expected to be needed when the chips and chipsets were designed. So Windows and all other OSes were originally designed to meet this.

It's not a "dirty little secret" either. It was in the design specs from day one.

What even makes matters worse, is that even if you do run a 64-bit OS, there is no guarantee the hardware will still allow access to a full 4 gig of memory. I've installed 64-bit Vista on some machines that had a 4 gig memory limit, to find out it was a hard limit and the system still did not allow access to the RAM underneath the video and other devices. It was a BIOS and chipset limit, not OS limit. As is with all other machines in 32-bits.

Here's proof: http://www.tomshardware.com/reviews/intel-cpu-history,1986-3.html

This is the specs for the original 386 chip from Intel. Memory address limit: 4096, 4 gigs! That is what Microsoft had to deal with, and it has stuck over the years. So blame Intel if you need to cast blame.

And it continued through the years:

486: 4 gig limit: http://www.tomshardware.com/reviews/intel-cpu-history,1986-4.html

Pentium: 4 gig limit: http://www.tomshardware.com/reviews/intel-cpu-history,1986-5.html

Pentium2 addressed 64 gig, but then Intel went back to 4 gig on the P3!!!!! http://www.tomshardware.com/reviews/intel-cpu-history,1986-7.html

Pentium 4: 4 gig limit: http://www.tomshardware.com/reviews/intel-cpu-history,1986-10.html

This trend finally broke hard with the later versions of the P4 chips when they started to support 64-bits:
http://www.tomshardware.com/reviews/intel-cpu-history,1986-12.html

BUT! That was only in native 64-bit processing mode. When the chip was running in 32-bit mode it still could only access 4 gig.

SO WHY BLAME THIS ON VISTA!!!! It's not MS's fault It was a trend started by Intel 15 years ago with the original 386 chip.

SO HOW TO FIX???? Stop using 32-bit OSes, and go full 64-bit. Eventually the market will get a clue and start supporting the consumers in their purchases of newer technology and move ahead in the field of larger memory addressing spaces.

Narg on August 27, 2008 6:16 AM

Wish I had done more research before installing XP 64 on the new machine. I am having the same issues as many others: unable to find drivers for devices, programs won't load, no 64 bit version of zone alarm, the list goes on and on. And I just got this back on the internet. Going to start over with the 32 bit XP Pro and wait a few years until the software writers catch up with my new hardware.

CathyG on August 31, 2008 2:36 AM

"The problem is not in Windows memory manager, it's in the hardware....
SO HOW TO FIX???? Stop using 32-bit OSes, and go full 64-bit."

If you are able to address the whole thing with a 64bit OS installed, you can conclude that the limitation is NOT in the hardware.

If Microsoft didn't criple the pae kernel in vista/xp, these versions could do it too just fine.

unspoken on September 5, 2008 3:42 AM

Let's take an example: Intel 3 series motherboard

Technical sheet found from http://www.intel.com/Assets/PDF/datasheet/316966.pdf says that chipset has 36-bit host bus addressing(supporting 64GB host address space). So if I got everything right that would be meaning: With 64-bit operation system I would be able to use address space of 64GB's. Meaning I would be able to use 64GB-xGB of RAM. Where x is addresses used by "memory mapped devices"? It would also be meaning that I am not able to use full 64-bit address space but 36-bit address space solves the 4GB problem.

So here we have hardware(motherboard) using non 32-bit host bus addressing?

Please, correct me if I am total wrong here.

Feel free to e-mail me:
honksu[REMOVE-THIS-SPAM-BREAK][AT]gmail[DOT]com

Honksu on September 8, 2008 1:16 PM

To get the most speed out of dual channel memory access, 2 sticks are faster than 4, due to bank switch latency. Therefore, 2 sticks of 2 GB each, is the best you can get.

Jeffrey on September 10, 2008 12:43 PM

Mac OS X can remap MMIO.

applerulez67 on September 11, 2008 1:41 AM

"To get the most speed out of dual channel memory access, 2 sticks are faster than 4, due to bank switch latency. Therefore, 2 sticks of 2 GB each, is the best you can get."

Not true. If two sticks performs better than four, it is due to other things.

jeremy on September 12, 2008 2:29 AM

Anyone haven't answeared me yet. :(
Look at my earlier post. It's written with same name.

Honksu on September 15, 2008 10:25 AM


So if it's a limitation to a 32bit OS, them why do 32bit Server operating systems see 8 to 32 gigs of ram - how are they getting around it.

Siggy

sig on September 22, 2008 5:08 PM

This blog Is very informative , I am really pleased to post my comment on this blog . It helped me with ocean of knowledge so I really belive you will do much better in the future . Good job web master .

Jeff Paul on October 16, 2008 8:47 PM

Hello,
I do really agree with all your previous and clarifying explanation of the mem usage that the OS does.
All but the conclusion.
Conclusion is
1. if you are going to stick with a 32 bit system DO waste money on 4GB but do not feel deceive by the store or the arquitecture if the only memory you could use is 3.2 GB (if you buy 3GB you only be able to use 2,4GB) just rember the IO and all mem devices.
2. Purchase a brand new 64 bit system until year 2060 when TeraBytes got depracated and you will start asking around where are my 8TB of memory?

;)

ockaha on October 23, 2008 8:33 AM

Hi, I just read this exhausting WiKi on this and here is my two cents. ok, assume you have the hardware to do the 64 bit code. why can't one of you experts come up with a way to do 64 bit mem addressing for win XP 32, or Vista 32 till the dingle berries get off there back's and fix the 64 bit stuff. Is it so hard to make a fix. so we can use this supper cheap ram, come on I can fit 8GB in my machine and I can get it for $100.00. I don't want to buy Vista 64 bit if for any other reason then I just spent several hundred a year ago on Vista Profesional and I don't want to give them any more money

Tom on October 30, 2008 10:08 AM

I thought I was being slick. I built my own computer for gaming, NVIDIA 680 SLI motherboard, two NVIDIA GeForce 8800 GT SLI graphic cards, Intel Core2 Quad CPU Q66's @ 3.05GHz, 4 matched CM2X 1024- 6400C4 Corsair EEC memory sticks. I got fans on 2 750 gig HD's, fans on the chip sets, fans on the memory, 2 140mm fans on a 1000 watt Thermaltake Power Supply.Samsung 305t 30" monitor. Altec 400 watt sound system. 2 DVD burners and 2 players. Using Vista Home Premium. New printer, new scanner. Heck a new desk. I mean everything I could think of to make a fast, cool running, bulletproof system that would not be useless in 6 months. And at idle 44% to 46% of the on board memory is used. I even have my Windows rating up to 5.9. Whats a fella to do to improve things?

Martin on November 15, 2008 10:46 PM

so in other words like i have bought and installed 1,5 gig in my pc 512 is gone becausee my pc use it for other stuff becausee i only see 1,00 at properties of my computer?

ChillL on November 17, 2008 1:36 PM

martin i would recommend ditching vista and downgrading to xp. because vista takes way too much ram and eats up way too many resources. trust me. go back to xp for now. xp is way better for games, in fact most games specs recommend that you run windows xp. soldier of fortune payback is one game that recommends xp. your computer will run AWESOME on xp. the ONLY advantage to vista that i seen is nvidia doesnt support SLI for windows xp anymore, only vista. i am running dual sli cards and i have to use old drivers for xp. also that "compatibility mode" and this confirming every action you do is enough to make anyone insane.

mike on November 19, 2008 12:57 AM

also this might help people running SLI in windows xp and they have nvidia cards. the last forceware driver that will work both of your video cards in windows xp is 169.21. any new nvidia driver after this and SLI will not work in windows xp! WEAK

mike on November 19, 2008 1:03 AM

my lower class xp gaming system
jetway 939gt4-SLI-G-VC mother board
amd athlon 64 4000+ san diego 2mb l2 cache
2 gigs heat shielded kingston ram dual channel ddr1 400
dual SLI gigabyte geforce 7600gs 512mb each
i can run pretty much any game out there for now, but its getting hard with the newer games, since i rarely meet the minumum requirements, but still am able to play very well despite cpu,ram,video etc. still if you have 4 gigs of ram you should run XP. between video ram and SLI, there should be a performance INCREASE over vista.

mike on November 21, 2008 9:39 PM

oops don't want to give my computer too much credit, the processor has 1mb l2 cache! man, time for an upgrade!

mike on November 21, 2008 9:44 PM

Hi,
I just bought 2*2GB RAM modules and installed them on my Laptop, though in BIOS, i can see the 4096 MB as RAM, in Windows Vista (32 bit), i see only 3.1 GB and in Linux (Kubuntu), i see only around 3 GB too. Can anyone help me out!!!!
Gavin

Gavin SATHAN on December 3, 2008 7:35 PM

because that is the maximum amount of memory your 32-bit system can detect and utilise from that particular stock of RAM

Owen on December 3, 2008 9:50 PM

even though it says only 3.2 gigs or whatever the extra ram from your 4 gigs is still being used by the other components on the motherboard. its no big deal. but 4 gigs is the max with xp.

mike on December 8, 2008 2:26 PM

I'm curious, many server boards support multiple processors... If I had 2 32 bit cpus each addressing their own dimms. would I still be limited to the 4 gig limit of the 32-bit os?

Matt on December 9, 2008 11:19 AM

Wow...this blog is almost two years old and there's STILL a lot of confusion over x86 RAM support?

The easy explanation is this:

"32-bit can only support 4 GB of RAM. Period. Add my previous mosh pit explanation from last year to figure out why you're seeing less."

However, there are two things that filibust this explanation:

1) Windows NT-based OSes that don't have crippled PAE support (2000, Server 2003), assuming you're using the proper SKU for the amount of RAM you want (sorry, no 32 GB of RAM in Small Business Server 2003).

2) Mac and various Linux distros that have uncrippled PAE support out of the box.

I guess the best way to (try to) sum it up is:

[[32-bit XP SP2/SP3, 32-bit Vista]]
[Addressable: 2 GB (3 GB w. /3GB switch in boot.ini or BCD and with applications that know what the hell this is)]
[Total: 4 GB minus whatever your hardware snatches up]

They have crippled PAE in these OSes because of sloppy drivers that don't use it properly. Note that I said "crippled," not "disabled." It's enabled because of DEP support, but crippled because sloppy drivers see too much rammerz and bluescreenz out.

So the resident Linux zealot that's commented a few times is only half-right. It is a Windows problem, but it was a result of a "solution" to crappy drivers not written for too much rammerz.

[[32-bit Windows 2000 Professional, 2000 Server, XP SP0/SP1, Server 2003]]
[Addressable: 2 GB (3 GB w. /3GB switch in boot.ini or BCD and with applications that know what the hell this is)]
[Total: 4 GB with no PAE switch (no hardware snatching up rammerz), 32 GB with PAE switch, as long as your Windows SKU doesn't cap this artificially]

2000 Pro, XP SP0/SP1, Small Business Server 2000/2003, 2000 Server, Server 2003 Standard are limited to 4 GB of RAM (and will see all of it). 2000 Advanced Server and Server 2003 Premium will see 32 GB with the PAE switch. I'm not including the Datacenter versions because they run Itanium 64-bit. Of course if you are running non-PAE aware drivers = epic BSODz.

[[32-bit versions of Mac and Linux]]
[Same as above OSes with proper, not crippled PAE support]

Killer B on December 10, 2008 12:42 PM

Bottom line:

In this order:

1) Hardware issue (4 GB without PAE, 32 GB with it, no way around it)
2) Driver issue (LOLz, nobody need more than 4 GB RAM, I gotta get some tonight...I ain't writin no support fo PeeAayEee!!)
3) Windows issue (Damn slacker coders that want to get some on a Friday night...just cap PAE and cut losses, LOLz, nobody need more than 4 GB of RAM yet...if they do, make em git sixty-fo' bitz!)

Any questions?

Killer B on December 10, 2008 12:46 PM

i just bought a new alienware m15x with 4gb RAM and a 32 bit vista os, and my system says that it is using 4gb. i thought i would need to upgrade to a 64 bit, so i bought it prior to my laptop... i jsut may install it anyways.

orion on December 20, 2008 5:21 PM

Hm, my new laptop reports all 4 gb on vista 32, but a friend told me windows just plain lies :)

Oh well seems to be fast enough so far

Nestor on January 1, 2009 6:10 PM

Quote from a MSDN article written in 1992 about the NT memmory manager (yes 32-bit xp still uses it).

"each process can address up to 4 GB of memory using 32-bit linear addresses ... If only we had PCs with similar memory capacities"

http://msdn.microsoft.com/en-us/library/ms810616.aspx

Dave on January 5, 2009 8:47 AM

asdfasfa

gfasdgafdg on January 10, 2009 8:06 PM

I just installed 4GB (2x2GB) Transcend DDR2 800 MHz SODIMMs on my new aluminum iMac (20") and my Windows Vista SP1 (32-bit) detects and shows a full 4.00GB of RAM. Just thought I'd drop a note...

Aalaap Ghag on January 19, 2009 6:29 AM

It's worth remember that the IBM Power 950-series, what Apple called the G5, and the entire PowerPC microarchitecture was able to allow a 32-bit kernel to launch and run 64-bit apps, the problems in the x86_64 world is the fact that AMD basically messed up in their design. The i386 could run a 16-bit kernel and use all 32-bits worth of registers, so AMD's goof of 32-bit kernels cannot use 64-bits or registers.

The fact we hit the 32-bit memory ceiling on installable memory about the same time that 64-bit processors launched was a real coincidence, though it's my understanding we hit the 16-bit ceiling of 64KB in the 1970s if not the 1960s on mainframes. (Though IBM mainframes to this day use an oddball 31-bit architecture.)

Colin on January 21, 2009 12:17 PM

Woah, epic thread is epic. I now know a cartload more about Windows/x86 memory architecture and addressing, and I only wasted two hours reading all the posts... :-)

Seconding an earlier post: I decided I wanted the doubled bandwidth of dual-channel more than I cared about 0.5GB of potentially wasted space (and I didn't have two identical 512MB sticks for the second channel) so I bit the bullet and shelled out a _HUGE_ AU$38 for another 1GB stick.

Then I fried my northbridge by overclocking the FSB and not uprating the cooling enough... shit, back to my old 2GB single-channel mobo.

FOR SALE: 2 x 1GB DDR2400 DIMMS (slightly pre-loved but probably still stable...)

:-)

Thanks to Jeff and all who commented (with the exception of the time-wasters who lack a basic grasp of the English language...)

Cheers,
CJ.

Chris T on January 25, 2009 7:19 PM

why not just get a quad core?

P337 on January 27, 2009 3:14 AM

As the article current stands (Jan '09) the math for the 2^64 doesn't make sense. As previously mentioned, the division by 8 is not needed (which is presumably why it wasn't used in working out 2^32, where the correct answer is given). Also, "18,446,744,073,709,551,616 / (1,024 x 1,024) / 8 = 2" is not correct (punch it into a calculator - it will give 2199023255552). I can see what you have done - (ignoring the division by 8) you are dividing by 1024s to change units. But dividing by 1024 twice changes to megabytes, not exabytes as you have given your final answer in.

I'm sorry to cound nit-picky, but am posting in the hopes you will update this (either just tell us that 18,446,744,073,709,551,616 is 16 exabytes without showing the math, or add in the correct number of divisions by 1024 so that the answer given is actually what happens when you follow the formula provided). I was actually very confused for a little while as I tried to figure out what you had done. And correcting the wrong answer about how much memory is addressable in a 64-bit system (16 exabytes, not 2) would be helpful given how popular your blog is.

gechurch on January 27, 2009 4:25 AM

I heard that an application can free up and optimize memory.
But not tested it yet and not sure about it.
<a href="http://winguard.blogspot.com/2009/02/optimize-and-free-up-your-ram.html">http://winguard.blogspot.com/2009/02/optimize-and-free-up-your-ram.html</a>

winguard on February 3, 2009 7:55 PM

please remove this outdated content. its crap like this that fill up the web with bullshit. really with vista and windows 7 just around the corner any fool that is not using a i7 or quad core with a 64 bit operating system should just kill themselves. welcome to the 21st century, oh and mac's suck and linux sucks worse.

Joemamma on February 4, 2009 11:17 AM

Hey thanks good post.
http://crackzsl.blogspot.com/
Cyber Realm

winguard on February 14, 2009 8:24 AM

I wonder how you got 4,096 MB calculated?

After my calculation a 32 bit processor can address:

2^32 = 4,294,967,296 bits

4,294,967,296 / 8 = 536870912 bytes
536870912 / 1,024 = 524288 Kb
524288 / 1024 = 512 MB

But then I wonder that 512 MB is way to little that a processor can address. Am I missing something?

LencoTB on February 18, 2009 11:35 AM

Hmm, probably waayyy overlate, but...

x86 architectures use byte-addressable memory. Hence, it's not bits in your very first line.

http://webster.cs.ucr.edu/AoA/Windows/HTML/SystemOrganizationa2.html

Gregory on February 18, 2009 4:53 PM

The title says: "Where is my 4GB RAM"

Then the article explans that all there is, is 4GB of virtual address space. How wrong is that? The problem here is lack of physical address space.

mypet on February 20, 2009 2:21 AM

Vista wants more memory space to perform.
Windows7 much better than that.
http://dexzone.blogspot.com/
For windows themes and HD wallpapers.

Dexzone on February 21, 2009 5:32 AM

How about RAM overclocking.
http://winguard.blogspot.com - Winguard
I know that Overclocking can reduce the life time of devices.

winguard on March 2, 2009 6:26 AM

Of all the comment,s the "Bottom Line" by Killer B seems the closest to the truth. There is code in 32-bit Windows Vista for using memory above 4GB, but Microsoft doesn't license you to use it. The kernel reads two licensed limits from the registry and ignores all physical memory above a maximum and in excess of a total. Both limits are set at 4GB. You can patch this away in the kernel. My article http://www.geoffchappell.com/notes/windows/license/memory.htm shows how to do this for testing.

Rather than be up-front about this as the mechanism, Microsoft prefers to recommend 64-bit Windows (and 64-bit applications) and have the industry also recommend the migration, whether for convenience or ignorance. Whatever the merits of moving to 64 bits, there is an element of fraud to the way the migration is being promoted. More people should be complaining about it.

Geoff Chappell on March 2, 2009 4:35 PM

Geoff Chappell, it sure is interesting. A screen shot of the performance tab in task manager would provide better evidence, though, since Vista/SP1 tends to display installed amount instead of usable amount.

Anyways, have you verified that all the memory is actually used and this is not just display?

Me.H on March 6, 2009 7:36 AM

I wondered about the screen shot, given the changes for SP1 (which I do explain in several paragraphs later in the article), but I also decided that System Properties is by far the most common indicator in ordinary usage (which I presume to be why Microsoft changed it).

Moreover, there are articles out there that show how to use more than 4GB by taking a kernel from Windows Server 2008 at the price of being rejected as not properly activated. The System Properties dialog shows that my demonstration is with an activated Windows Vista.

Anyway, I take the point that I could show the Task Manager showing all 8GB as being in use. I will think about how to fit it in if I revise the article. (For now, the writing of that article has exhausted my sense of working for free in the public interest, and unless there's a show-stopper of a problem, I really don't care to look at it again for a while.)

As for "have I verified that all the memory is actually used and this is not just display", I acknowledge I have not addressed it directly. I'll think about this, too. On the other hand, I think you are really picking at nits to ask this of an article that already has far more detail than would usually be accepted as establishing credibility. Among those details are directions for how you can do as much of your own testing as you want.

Really, the directions are the point. It's over to the community of users to test what Microsoft does not permit and to kick up a fuss if they feel they are being defrauded. There's only so much I can do.

Geoff Chappell on March 6, 2009 5:38 PM

Thanks to Jeff and all who commented (with the exception of the time-wasters who lack a basic grasp of the English language...)

---------------------------
http://www.carrental-kingdom.com/

ytecht on March 17, 2009 3:17 AM

First of all thanks to Jeff Atwood for his blog and Geoff Chappell who's article http://www.geoffchappell.com/notes/windows/license/memory.htm is IMHO excellent reading and although I do not have 8GiB of RAM I did successfully increase the physical address space limit and consequently was able to use 4092MiB of RAM with 32 bit Vista SP1, 4GiB of RAM installed, for testing purposes. I also verified the amount of RAM using VirtualAlloc and no page file. Normally only 3068MiB of RAM is available to me with the standard 4GiB physical address space limit.

With all the conflicting information around rather than just relying on someone's word, if you have the appropriate hardware just test it for yourself. ;)

A. N. Other on March 22, 2009 6:09 AM

Thanks for the explanations and advice. It answers a question I asked myself, too.

Dr Claude Windenberger on March 26, 2009 1:53 AM

this is an awesome write up. i'm going with four 1 gig sticks, i know i won't get it all, but as long as dual channel works i am happy.

memory is so cheap right now.

when trying to maintain dual channel; was cost the only reason to use 2 1gb sticks & 2 512mb instead of just 4 1gb sticks??

jesse on May 12, 2009 1:36 PM

I have winXPPro64 (AMD64) with 4 sticks of 1 gig and I still can only see 3.4 of it.

No one has been able to solve that for me. I've given up.

greg on June 2, 2009 11:34 PM

@Josh:

Your math is entirely wrong! with 32bits you can count and address 4GB of things... normally it addresses BYTES in the same way that 1 bit can address 2 BYTES and 8 bits can address 256 BYTES or ASCII CHARS or people or cats.... so 4 million bits addresses 4 million BYTES.

When you are counting or addressing it has NOTHING to do with what you are counting and that is why it has nothing to do with BITS or bytes... it is just counting and addressing and with 32 bits you can count or address 4GB of addresses or memory or bytes.

So 32 bits is 4GB not 0.5GB. Replace your stupid spreadsheet with a disclaimer asking people to forgive your grievous mistake.

TM on June 11, 2009 10:07 AM

@LencoTB
addressing is counting... 32bits gives you the ability to count to 4GB... don't try to convert bits to bytes to determine how many bites that is...

32bits is 2^32 = 4,294,967,296 bits which can address 4GB of things we call addresses aka memory units aka bytes...

with 8 bit addressing you can address 256 bytes... think smaller and perhaps you'll see your obvious mistake... otherwise ignore that we are addressing bytes... imagine we are counting instead or that we are addressing houses or something else and don't try to convert things as if they are equal... one is a number (the bits) the other is what is being counted or addressed (the bytes).

TM on June 11, 2009 10:16 AM

Great article and comments, a ton of useful information here. Big thanks to the informative contributions from Geoff Chappell and Killer B, and also the linux guy saying "my system runs the latest software...", that was a good laugh.

Eric Layne on June 16, 2009 9:43 AM

Cool, Thanks for the great tip!
http://www.mpos.net/s/p3.asp
http://www.mpos.net/s/p4.asp

COOL on June 23, 2009 8:22 PM

How many RAM do you have now in the meanwhile?

vergleich on June 29, 2009 2:15 AM






(no HTML)


Verification (needed to reduce spam):


Content (c) 2009 Jeff Atwood. Logo image used with permission of the author. (c) 1993 Steven C. McConnell. All Rights Reserved.