New Memory

This is a discussion on New Memory within the Tech Board forums, part of the Community Boards category; I have recently installed some new memory in my computer, upgrading rfrom 1gb to 4gb. However, the Windows XP, as ...

New Memory

I have recently installed some new memory in my computer, upgrading rfrom 1gb to 4gb. However, the Windows XP, as well as the bios, says that there is only 3.14gb installed. Is this discrepency normal or could there be a bad module? When there was just the one original 1gb module the bios reported 1gb.

I ran MemTest and it reported no errors.

All for modules are the same brand/model/size (Corsair Value Select 1gb ddr2 667)

I'm not entirely sure of this, but I seem to remember that windows XP cannot address the total of 4GB, despite that being the maximum amount of supported memory. You may be looking at the amount of addressable memory when seeing those 3.14 Gb

Anyways, changing operating system from Windows to Linux because you happen to want to use that extra 1GB memory is... silly.
On the other hand changing to a 64 bit version of windows is also not that much of an improvement. Because those extra 700Mb-800Mb will be mostly consumed by the OS.

Anyways, changing operating system from Windows to Linux because you happen to want to use that extra 1GB memory is... silly.
On the other hand changing to a 64 bit version of windows is also not that much of an improvement. Because those extra 700Mb-800Mb will be mostly consumed by the OS.

Huh? Do you have some documentation for that?

I can see that a 64-bit OS would take a little bit more memory, but not that much more. Obviously, having DLL's (or .SO's in the case of Linux) for both 32- and 64-bit essentially doubles the size of the distribution on disk, but assuming that you don't have that many applications using many different DLL's that are used in both 32-bit mode and 64-bit mode, it shouldn't make a big difference to the actual amount of memory used.

Page-tables may take up twice the space compared to a 32-bit OS (but not necessarily, as 32-bit OS's are also using PAE) - but a pagetable to cover 4GB as 4KB pages is 1MB, and whilst there are multiple copies of page-tables, these are not fully populated page-tables [only memory that is reserved or committed is places in populated page-table entries] - so unless you are running hundreds of apps that all use lots of memory (in which case you obviously need significantly more than 4GB of ram anyways), it shouldn't make much of a difference here.

x86-64 code-size is pretty close to 32-bit code-size. Yes, the opcodes may be longer, but there are savings in having more registers and passing parameters in registers, so it shouldn't grow much more than 10&#37; with a reasonably equally good compiler (and there should be little difference in efficiency in the compiler - if anything, the 32-bit version is more likely to perform badly due to lack of registers). If we scale up 300MB (I'm being kind here and saying that the other 4-500MB is taken up by other things) in 10% growth, then that would mean that 32-bit Windows requires about 3GB of RAM to run - which doesn't make much sense.

Pointers in OS internal data structures would take up a bit more space, but again, you need many of those to eat up 700MB. (100 million pointers, give or take a few).

Sure, the register context for each thread is 4x the size, give or take, but again, you don't have that many threads that it makes any significant difference in memory foot print.

Another thing to consider:
32-bit OS's using PAE (64-bit per entry page-tables) will be able to address up to 64GB. Windows XP SP2 introduces "Execution protection", which means that the OS is in PAE mode, so it SHOULD be able to access memory above 4GB - now they may well have prevented that from being enabled in the OS distribution - I have never investigated that.

Edit: I'm not comparing different OS architectures here - Vista 64-bit may well be much bigger than XP 32-bit - but that's not a change from 32- to 64-bit - that's a change from XP to Vista.