According to this MSDN page:
WOW64 enables 32-bit applications to take advantage of the 64-bit kernel. Therefore, 32-bit applications can use a
See this CodeCentral article: Using more than 3 GB memory in a 32 bit Delphi program.
In modern Delphi versions just add compiler directive to the dpr:
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
If you do this, make sure to use FastMM because it supports > 2GB pointers. Earlier Delphi memory managers won't work well as Barry Kelly already described.
Use the linker directive $SetPEFlags:
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
The IMAGE_FILE_LARGE_ADDRESS_AWARE
constant is defined in Windows.pas. I don't remember which Delphi version first included it, though.
In Delphi 2007, you'll find SetPEFlags documented in "PE (portable executable) header flags (Delphi)".
Some useful IMAGE_FILE_HEADER flags:
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} //$0020
Application can handle addresses larger than 2 GB.
{$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP} //$0800
If the image is on the network, copy it to and run it from the swap file.
{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP} //$0400
If the image is on removable media, copy it to and run it from the swap file.
Some IMAGE_FILE_HEADER flags:
{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_NX_COMPAT} //$0100
The image is compatible with data execution prevention (DEP).
{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE} //$0040
The DLL can be relocated at load time. (aka ASLR - Address Space Layout Randomization)
{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE} //$8000
The image is terminal server aware.
Note that there are assumptions baked into the compiler and RTL that pointers, interpreted as signed 32-bit integers, will never be negative. For example, the compiler will not permit creating a data structure greater than 2GB in size, and certain boundary checks in the RTL assume that e.g. Index + Count < 0
meant the addition overflowed, where Index
may be an index into a byte array. Other problems may crop up in the memory manager.
Test well and proceed at your own risk.