Ok people, assuming I got all of this, here's a sort of compiled mini-guide. Please correct anything I have wrong:
----

Summing it up:

- You can't get much more than 3GB out of 32-bit Windows XP, period. Addressable amount will vary (3 / 3.3 / 3.5GB) depending on the devices you have, mainly your graphics card.

Why? above 3GB is necessary for device mapping, for example, drivers accessing your graphics card RAM as if it were main memory.

- PAE does *not* help in the former case.

Why? Enabling PAE is only good for enabling the NX/XD (DEP) functionality when using modern CPUs, because even if it's enabled, 32-bit Windows will not map stuff above the 4GB boundary, thus falling in the previous situation.

- The "memory remap" option in the BIOS does *not* help you in the former situation. The 32-bit addressable space problem remains with 32-bit WinXP. It helps in other situation (see below).

How can I use more than 3GB of RAM then?

- Your motherboard must support more than 3GB (well duh)- Your motherboadd must support memory remapping (most modern boards do, look for "Memory remap above 4G" or something similar).

Why? The 3-4GB area is for devices. This "splits" the RAM in two pieces below 3GB and above 4 or so GB, respectively. Don't worry, the PC knows what it's doing.

- Your operating system must be 64-bit OR 32-bit Windows Server, or Linux with proper PAE support.

BIG NOTE: If you have a 64-bit operating system but your program is 32-bit only, it will still be only able to address 4GB. That means that, i.e., even if you're running XP64 with 8GB of RAM, Supreme Commander will only be able to use, at maximum, 4 of those 8 gigabytes.

derFunkenstein wrote:I think Supreme Commander is not the application you want to use in that illustration because it was built with the LARGE_ADDRESS_AWARE

or maybe it's a great example because it's a 32-bit app that can use all 4GB as user space should it be available. Now i'm not sure. :/

32-bit applications will only use up to a maxmium of 4GB sanning OS and other hardware limitations. The LARGE-ADDRESS_AWARE tag is simply telling Windows (32/64bit verisons) that the application can use beyond the default memory limit of 2GB per process.

Last edited by Krogoth on Mon Jul 16, 2007 3:33 pm, edited 1 time in total.

x86-64 architect supports up to 2^64 bytes. The problem lies with the memory controllers. IIRC, the memory controller on the K8 supports up to 48-bit for memory addressing. I am not sure what is the story on Intel front. It is safe to say that server-grade stuff has a higher celling.

I seriously doubt that a desktop form factor using semiconductors will ever be able to reach 1TB limit for 40-bit memory addressing.

Edit: after some furthering reading. It seems that K8 is indeed limited to 40bit memory addressing due to EV6 bus.

However, the memory address issues aren't an architectural flaw, and I highly doubt that any of the motherboards that the current AMD64/EM64T chips ride on would be able to support more than a terabyte of RAM even if there were the address space to support it. (I checked, and at least some of the EM64T chips are 40-bit...)

So, it's a non-issue. When it becomes an issue, add the address lines, and you're done.

No, he had it right with bytes. x86 is byte addressed. Each address refers to a byte, and each is 64 bits, which gives you 2^64 possible bytes.

If x86 was bit addressed, 32-bits would only give you 512MB of address space. Bit addressable architectures are rare: on his webpage, Andrew Morton notes that it was a pain to port gcc to the TI34010 due to this quirk.

bitvector wrote:No, he had it right with bytes. x86 is byte addressed. Each address refers to a byte, and each is 64 bits, which gives you 2^64 possible bytes.

If x86 was bit addressed, 32-bits would only give you 512MB of address space. Bit addressable architectures are rare: on his webpage, Andrew Morton notes that it was a pain to port gcc to the TI34010 due to this quirk.

gah. Oops.

So basically an address is a 32- or 64-bit integer that links to the specific point where a byte of data is located?

I do not understand what I do. For what I want to do, I do not do. But what I hate, I do.

As I understand, a physical address in the AMD 52-bit system, in hexadecimal representation, would range up to 0xF FFFF FFFF FFFF.

The current processors, however, AS I UNDERSTAND, would only allow you to go to 0x0 00FF FFFF FFFF. Addresses above that, AGAIN AS I UNDERSTAND, are invalid.

The simplest explanation I found of all of this, anyway, was in an old Apple ][e's manual.

Imagine an array of mailboxes, 16x16. Each row and column is lettered 0 through F. Each mailbox can hold eight bits - that is, one byte. (Which is really convenient if your processor can handle at least an 8-bit word.)

So, memory address... 0x9B... referred to the mailbox in row 9 (that is, the 10th row), column B (that is, the 12th column.) Or vice versa, it doesn't really matter. So, you would load the contents of 0x9B into a register, and now that would be what you're working on. (FWIW, I'm not using the nomenclature for hexadecimal that they used back then, which would have been $9B.)

Now, imagine that there's a 16x16 array... of these arrays of mailboxes. Call each array of mailbox a page, and the main array your address space, and you've got a memory model. So, I can obtain the contents of... 0x009B, and I've got that same memory location. 0x9B9B, however, is quite obviously a different location.

It was a struggle - mostly because my computer spontaneously rebooted mid-upgrade and totally errored out after that, so I had to start over (I think it was caused because I didn't uninstall the 32-bit version of Daemon Tools) - but I did manage to get upgraded to Vista Home Premium 64-bit last night. It totally proved bitvector's first post right:

1.) It still only showed 3007MB of memory without memory remapping
2.) Enabling memory remapping now shows the full 3GB
3.) It made me re-activate because I ended up having to do a clean install - fortunately I did back up everything important to another drive before attempting the upgrade.

I do not understand what I do. For what I want to do, I do not do. But what I hate, I do.

Among all of our tests, there are three identifiable patterns, all relating to some difference between Vista and XP. Those are:

1. Vista is using more address space than XP in all situations 2. The amount of address space used with Vista seems to be related to the amount of video memory on our video card 3. XP on the other hand does not fluctuate at all, the address space usage is the same no matter what card we use.

From the thread quoted:

So, it does appear from their testing that video memory for 3D apps eats up a lot more application address space than XP, and that it is variable with the amount of video ram you have on your video card.

This is not necessarily all bad, just make sure you have lots of RAM when running Vista, especially for 3D apps!

So now I'm confused...What is the relationship between the [Virtual?] address space and the hardware ram referenced in the quote? Also, (at a guess) isn't XP utilizing the address space for the PCIe buss while Vista is using it to map the gfx card memory?

I know you guys are not responsible for other sites and their comments but it appears that you people have a handle on the ram issue and so that is why I'm asking.
TIA for any help that can be offered
OD

I think it's because of the way that video RAM is virtualized (or supposed to be, at least) in Vista - more address space is required in order to account for VRAM virtualization that doesn't exist at all in XP.

I do not understand what I do. For what I want to do, I do not do. But what I hate, I do.

oldDummy wrote:So now I'm confused...What is the relationship between the [Virtual?] address space and the hardware ram referenced in the quote?

The reference quote isn't so perfect.

Vista uses more virtual address space per application than XP. Anecdotally this seems to be related to the DX10 feature of creating virtual memory for GPUs.

This means that some applications/games that under XP got real close to the 2GB virtual address application limit, might actually cross the 2GB limit in Vista.

This means that more applications need to be Large Address Aware. More RAM isn't necessarily gonna fix anything, as there is often a large disconnect between the amount of actual physical RAM in use and the amount of virtual memory in use.

The first Anandtech article shows just that, which makes makes said blurb all the stranger.

oldDummy wrote:Also, (at a guess) isn't XP utilizing the address space for the PCIe buss while Vista is using it to map the gfx card memory?

supreme commander can only use 2gb on windows 64, unless using boot.ini stuff, or patching the game to be large memory aware. (there will be an official patch/expansion, and there is an unofficial one.)