Ho riscontrato questo problema durante il test delle prestazioni.Compilazione di C# con qualsiasi set di CPU L'applicazione può gestire indirizzi grandi (> 2 GB)
Quando si compila un'applicazione C# Console con la bandiera piattaforma x86, la bandiera Consapevole Large Address non è impostato:
uscita da dumpbin/intestazioni 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
Quando si imposta la bandiera per "Qualsiasi CPU" l'exe risultante è 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
si noti che la "Applicazione in grado di gestire grandi dimensioni (> 2 GB) indirizzi" flag è impostato.
Non riesco a trovare alcuna documentazione su questo argomento. Tutte le altre domande di overflow dello stack suggeriscono è necessario farlo manualmente:
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
La domanda è: Dove si trova questa documentata?
No dove afaik. È risolvibile, strano che tu non sia interessato alle soluzioni. –
@HansPassant, non è necessariamente un problema (per noi), solo molto inaspettato. E il fatto che non sia documentato lo rende un dolore. –
La cosa più vicina che riesco a trovare nella documentazione da una fonte primaria è questo post del blog, http://blogs.msdn.com/b/calvin_hsia/archive/2010/09/27/10068359.aspx. – JamieSee