С# компиляция для 32/64 бит или для любого процессора?
Возможный дубликат:
Цель Visual Studio "Любой процессор"
Я заметил, что при компиляции кода С# в VS обычно существуют опции для компиляции для 32/64 бит-систем, а также для компиляции для любого процессора.
Какая разница между двумя параметрами? Выбирает ли какой-либо процессор только компиляцию до промежуточного байтового кода, в то время как первый параметр компилируется до машинного кода (для меня это маловероятно)? Или что-то еще?
Ответы
Ответ 1
На машине 32-бит:
-
Любой процессор: работает как 32-разрядный процесс, может загружать сборки Any CPU и x86, получит BadImageFormatException
если он пытается загрузить сборку x64.
-
x86: тот же, что и Любой CPU.
-
x64: BadImageFormatException
всегда.
На машине 64-бит:
-
Любой процессор: работает как 64-разрядный процесс, может загружать сборки Any CPU и x64, получит BadImageFormatException
если он пытается загрузить сборку x86.
-
x86: работает как 32-разрядный процесс, может загружать сборки Any CPU и x86, получит BadImageFormatException
если он пытается загрузить сборку x64.
-
x64: то же, что и Любой процессор.
Это компилятор JIT, который генерирует код сборки, совместимый с запрошенной целью на основе этого флага.
Ответ 2
x86 - Ваше программное обеспечение всегда будет работать в 32-битном режиме, как на 32-битных системах, так и на 64-битных системах.
x64 - Ваше программное обеспечение всегда будет работать в 64-битном режиме, будет работать на 64-битной системе, но не будет работать на 32-битной системе.
Любой процессор - ваше программное обеспечение будет работать в соответствии с вашей ОС. если у вас 32-битная ОС, код будет работать в 32-битном режиме, если у вас есть 64-битная ОС, ваш код будет работать в 64-битном режиме.