Компиляция C# для 32/64 бит или для любого процессора?

Возможный дубликат:
Visual Studio "Любой процессор" цель

Я заметил, что при компиляции кода C# в VS обычно есть варианты компиляции для 32/64 битных систем, а также есть компиляция для любого процессора.

В чем разница между двумя вариантами? Выбор любого процессора компилируется только до промежуточного байтового кода, в то время как первый вариант компилируется до машинного кода (это звучит маловероятно для меня)? Или что-то другое?

2 ответа

Решение

На 32-битной машине:

  • Любой ЦП: работает как 32-битный процесс, может загружать любые ЦП и сборки x86, получит BadImageFormatException если он пытается загрузить сборку x64.

  • x86: так же, как любой процессор

  • х64: BadImageFormatException всегда.

На 64-битной машине:

  • Любой ЦП: работает как 64-битный процесс, может загружать любые ЦП и сборки x64, получит BadImageFormatException если он пытается загрузить сборку x86.

  • x86: запускается как 32-битный процесс, может загружать любые сборки процессора и x86, получит BadImageFormatException если он пытается загрузить сборку x64.

  • x64: так же, как любой процессор

Именно JIT-компилятор генерирует код сборки, который совместим с запрошенной целью, основываясь на этом флаге.

x86 - Ваше программное обеспечение всегда будет работать в 32-битном режиме, как на 32-битных, так и на 64-битных системах.

x64 - Ваше программное обеспечение всегда будет работать в 64-битном режиме, будет работать в 64-битной системе, но не будет работать в 32-битной системе.

Любой процессор - Ваше программное обеспечение будет работать в соответствии с вашей ОС. если у вас 32-битная ОС, ваш код будет работать в 32-битном режиме, если у вас 64-битная ОС, ваш код будет работать в 64-битном режиме.

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