Creston wrote on Sep 30, 2011, 11:42:
That's not how it works, Dev. A 32 bit memory controller can access a TOTAL of 4GB of RAM, but that includes every type of memory you have in your system. So your videocard counts against it.
Dev wrote on Sep 29, 2011, 21:20:
Whats sad is this arbitrary limit in vista/7 32 bit OS is more due to MS's licensing decisions than due to an actual limit. With XP it was possible to have more than 4gb in the 32 bit setup, and even though it wasn't possible to make much use of it, it WAS possible to use it in at least some ways.
Errrr, what? It's not an arbitrary limit that MS put in place to annoy people. It's simply a function of math. A 32 bit controller can address 2^32 addresses, which equals 4GB. You're not getting more addressable space in XP-32.
a) Yes I'm aware of how memory addressing works, I've done assembly before. I was simplifying things
There's no real way to tell how much more memory between 3gb and 4gb he can get without actually having an identical setup including identical hardware, identical configuration, and identical drivers. All of that can change how much 32bit address space windows reserves between 3gb and 4gb. He would just have to try it and see. The funny thing is, its not necessary to actually do it that way. The accessory addresses were picked to be under 4gb but as high as possible (such as between 3gb and 4gb) both because it was thought that part wouldn't be used much, and to avoid potential compatibility issues. Just like originally when people had 640k, the driver addresses were between that and 1 mb, because it was thought that the extra space wasn't going to be needed and to keep the complexity of the chip down.
Even if you only have 2gb, the drivers still do address ranges things like video cards usually in the space between 3gb and 4gb on 32 bit machines. The cards themselves pick up on the bus when that space is addressed (even when there's no actual RAM there) and they grab the instructions from there. Thats why you don't see huge missing chunks of RAM when you have fewer GBs in the system. Having a IO device intercept non existent memory addresses is an easy and cheap "hack" to get I/O communication done with a CPU, but not add additional crazy amounts of bus lines. Its definitely an instructional experience if you play with a 8086 setup at the assembly level to learn some of this as I have. Its quite interesting to see all the workarounds and brilliant thinking to get the complexity of the parts (especially the required number of pins because of address lines) lower and cheaper and still perform well. Anyway, MS coulda done a workaround so that when you DID have 4gb, it moved the addresses of either the actual ram or the driver accesses to an separate address range. But it woulda been a fair amount of work and potential compatibility issues, so I don't blame them for leaving it alone. What I DO blame them for is the unneeded restrictions on 4gb limit in vista/7 32 bit compared to XP.
b) Actually, there IS a compelling argument to be made that MS restricted it in vista/7 more than they had to solely for licensing purposes. You are talking about a memory controller as if there's no workarounds. 16 bit computers? They were NOT restricted to 64k (remember 2^16=64k). More like 640k (or perhaps 1 meg depending on how things were addressed).
First off, XP could use more than 4gb, with the /PAE switch. Like I said, it can't use it very well, but it can make some use out of it.
Second that link I pasted in my earlier reply to the official MS documentation on memory limits? Did you notice that the Windows Server 2008 Datacenter/Enterprise versions support 64 gb ram in the 32 bit editions? I believe that 2003 windows 32bit server has above 4gb limits, perhaps not quite that much, but certainly above 4gb.
Here is another link that talks about why in vista/7 its in large part an arbitrary licensing limit:http://www.geoffchappell.com/viewer.htm?doc=notes/windows/license/memory.htm
Its interesting that vista/7 actually include a version of the 32 bit EXE thats quite capable of playing with more than 4gb of ram, but somewhere along the line windows tells it to ignore the extra memory.
This isn't the only decision MS has made based on convenience, they have a history of it actually. One of the more egregious examples off the top of my head that I've come across is how they took user access level security out of Access 2007 since there were some vulnerabilities with how it was done in 2003. Some guys did some research and figured out that MS coulda fixed those vulnerabilities with literally just a few lines of code (such as making sure the hashes were more random). Instead MS just decided to rip out the ability to use it in 2007 files.
MS is quite happy to have people assume that the 4gb limit is only from 32 bits.This comment was edited on Sep 30, 2011, 13:11.