If you’re not running a 64-bit version of Windows, some of your customers likely are. While porting your applications to 64-bit is recommended, you can make a small change to your 32-bit builds that provides a significant benefit: increased memory availability.
Enable /LARGEADDRESSAWARE in Your 32-Bit EXEs
Adding the /LARGEADDRESSAWARE flag to your EXE linker allows a 32-bit application running on a 64-bit system to use up to 4 GB of address space instead of the default 2 GB.
⚠️ Important: Test thoroughly on 64-bit systems. Using high pointer bits or subtracting pointers from different objects may cause critical issues when /LARGEADDRESSAWARE is enabled.
To enable this in Visual Studio:
-
Open your EXE project properties.
-
Navigate to Linker → System.
-
Set Enable Large Address to Yes.
Example: Memory Allocation Benefit
Consider a test application allocating 50 MB each time a button is clicked, displaying a message box if allocation fails.
-
Without /LARGEADDRESSAWARE, memory usage is limited to ~2 GB.
-
With /LARGEADDRESSAWARE enabled, memory usage increases up to 4 GB on x64 systems.
This change works seamlessly on 32-bit machines as well. For interactions with the /3GB OS boot switch, refer to official Microsoft documentation.
Best Practices for Using /LARGEADDRESSAWARE
-
Test all 32-bit libraries for pointer arithmetic issues.
-
Avoid enabling /LARGEADDRESSAWARE blindly; verify stability across target systems.
-
Consider gradual migration to 64-bit EXEs for future-proofing.
Applying this minor adjustment helps your 32-bit applications handle larger memory workloads without fully porting to 64-bit yet.