Компиляция C# с любыми наборами ЦП Приложение может обрабатывать большие (>2 ГБ) адреса

Я столкнулся с этой проблемой во время тестирования производительности.

При компиляции консольного приложения C# с флагом платформы x86 флаг Large Address Aware не устанавливается:

Вывод из 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

При установке флажка "Any Cpu", в результате исполняемый файл является 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

Обратите внимание, что установлен флаг "Приложение может обрабатывать большие (>2 ГБ) адреса".

Я не могу найти какую-либо документацию по этому вопросу. Все остальные вопросы о переполнении стека предполагают, что вы должны сделать это вручную:

Как включить IMAGE_FILE_LARGE_ADDRESS_AWARE в исходном коде C#?

Могу ли я установить LARGEADDRESSAWARE из Visual Studio?

Используйте 3Gb памяти в 32-битных приложениях

Вопрос: где это задокументировано?

1 ответ

Цель AnyCPU - запускать управляемый код на платформах x86 и x64, одновременно используя преимущества большего адресного пространства платформ x64. Единственный способ сделать это состоит в том, чтобы пометить двоичный файл как большой адрес, осведомленный при нацеливании на AnyCPU. Кроме того, если бы это было не так, было бы неуместно устанавливать Prefer 32-bit по умолчанию.

Где это задокументировано?

Это не было явно задокументировано, это подразумевается.

Все остальные вопросы переполнения стека предполагают, что вы должны сделать это вручную

Независимо от всех этих вопросов и ответов, это требуется только при таргетинге на x86.

Другие вопросы по тегам