Using RAM over 512MB

Q: I can use only 512MB of RAM from my device. How can I address the remaining RAM ? On one of your posts you said that there is a way to go with more that 512 MB RAM. Can you help me on this issue?

A: Windows CE can't address more than 512MB. There's no way to make the OS use it the way it uses other RAM. OEMAddressTable, OEMGetExtensionDRAM and OEMEnumExtensionDRAM are all limited to 512MB.

The only thing you can do is write applications that specifically know about the extra memory. They can use VirtualAlloc with address 0 to reserve some virtual address space, and then use VirtualCopy with the PAGE_PHYSICAL to map the physical memory above 512MB into the virtual address space. In this manner the application can use the additional RAM. But the memory won't be used by the system the way other memory is. It won't go into the pool that's used for general operation; other applications won't ever get that memory. Your system could use up all of the first 512MB and then "run out of memory" because it can't use the other 512MB.

If your device needs a lot of resources like this, you might want to look into Windows XP Embedded instead.

Q: Are there any plans to address this problem in future releases of Windows CE?

A: I cannot comment on what will or will not be in future releases. I can only say, so far I don't think it is a high priority.