Despite the fact that I am running a 64-bit version of Windows 7, I sometimes need to run 32-bit applications. By default these applications are only able to use 2 GB of memory, regardless of the amount of available memory on the system (see: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspx#memory_limits). However, I sometimes need these 32-bit applications to be able to use more than 2 GB of memory. If upgrading to a 64-bit application is not an option, then I can still use up to 4 GB of memory by modifying the header of the application’s binary by using the following procedure (http://gisgeek.blogspot.com/2012/01/set-32bit-executable-largeaddressaware.html). These steps were tested on a system with Visual Studio 2010 installed:
- Before performing any other step you should create a backup copy of the executable to be modified, especially if you cannot easily re-create or re-obtain the original.
- Launch a Visual Studio command prompt and execute the following command to modify the header of the application’s binary: editbin /LARGEADDRESSAWARE “C:pathtoexeexecutable.exe”.
- Verify that this worked by typing a command to print the binary’s header: dumpbin /headers “C:pathtoexeexecutable.exe” | more. You should see “Application can handle large (>2GB) addresses” in the output.
After performing these steps the modified application should be able to use 4 GB of memory. You should test the application to make sure that it still works correctly. Ideally these tests will force the application to use more than 2 GB of memory.
If you are developing an application with Visual Studio you can modify the project properties in order to avoid modifying the binary in a post-processing step. To make your application large address aware you should open the properties for your project and navigate to the “Linker -> System” page. On this page you should set the “Enable large addresses” property to “Yes (/LARGEADDRESSAWARE)”.
If you are running 64-bit Windows and have the option to upgrade a 32-bit application to 64-bit, I recommend upgrading the application instead of modifying its binary, as the consequences of doing so may be difficult to predict. See the following thread for a discussion of potential problems with increasing the amount of memory available to 32-bit Python: http://bugs.python.org/issue1449496. Even if the change does not result in any adverse effects, you will still need to switch to 64-bit when the application’s memory needs exceed 4 GB. You should consider your application’s future memory needs when deciding how to increase memory in the short term.