I ran into this issue during performance testing.
When compiling a C# Console application with the x86 platform flag, the Large Address Aware flag is not set:
Output from dumpbin /headers app.exe
:
Dump of file app.exe
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
14C machine (x86)
3 number of sections
569F0089 time date stamp Tue Jan 19 21:35:37 2016
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
102 characteristics
Executable
32 bit word machine
When setting the flag to "Any Cpu" the resulting exe is Large Address Aware:
Dump of file app.exe
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
14C machine (x86)
3 number of sections
569F01D7 time date stamp Tue Jan 19 21:41:11 2016
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
22 characteristics
Executable
Application can handle large (>2GB) addresses
Notice that the "Application can handle large (>2GB) addresses" flag is set.
I cannot find any documentation on this subject. All other stack overflow questions suggest you must do this manually:
How to enable IMAGE_FILE_LARGE_ADDRESS_AWARE in C# source code?
Can I set LARGEADDRESSAWARE from within Visual Studio?
Use the 3Gb of memory in 32 bits applications
The question is: Where is this documented?