You need to make sure that you are not using the built-in memory manager and not using something that can support addresses> 2 GB. e.g. FastMM.
You may have another code, usually a third-party code, in your code base that will drop from addresses> 2 GB. I personally deal with this by working under the 64-bit version of Windows and forcing the system to use memory allocation from top to bottom using the registry setting .
When you do this, you may encounter some errors in Windows. For example, GetCursorPos in Vista fails if its parameter address is> 2 GB. I am working on this by fixing a Windows.GetCursorPos version that goes through GetCursorInfo . This error was fixed in Windows 7, but MS decided not to return it to Vista.
I cannot stress enough how important it is to work with the memory allocation turned on from top to bottom.
source share