Какова цель настройки "Предпочитаю 32-бит" в Visual Studio и как она работает?

Enter image description here

Мне непонятно, как компилятор будет автоматически знать, как компилировать для 64-битного, когда это необходимо. Как он узнает, когда он может уверенно нацелиться на 32-битный?

Мне в основном интересно, как компилятор знает, какую архитектуру нужно настроить при компиляции. Анализирует ли он код и принимает решение на основе того, что он находит?

Ответ 1

В Microsoft есть запись в блоге, что на самом деле означает AnyCPU, начиная с.NET 4.5 и Visual Studio 11:

В.NET 4.5 и Visual Studio 11 сыр был перемещен. По умолчанию для большинства проектов.NET снова используется AnyCPU, но для AnyCPU теперь имеется более одного значения. Существует дополнительный подтип AnyCPU, "Любой 32-битный процессор", который является новым по умолчанию (в целом, теперь есть пять опций для переключателя компилятора/платформа С#: x86, Itanium, x64, anycpu и anycpu32bitpreferred). При использовании варианта "Предпочитать 32-разрядный" AnyCPU семантика выглядит следующим образом:

  • Если процесс выполняется в 32-разрядной системе Windows, он выполняется как 32-разрядный процесс. IL скомпилирован в машинный код x86.
  • Если процесс выполняется в 64-разрядной системе Windows, он выполняется как 32-разрядный процесс. IL скомпилирован в машинный код x86.
  • Если процесс выполняется в системе ARM Windows, он выполняется как 32-разрядный процесс. IL скомпилирован в машинный код ARM.

Таким образом, разница между "Любой 32-битный процессор предпочтительнее" и "x86" заключается только в следующем: приложение.NET, скомпилированное для x86, не сможет работать в системе ARM Windows, но приложение "Любой 32-битный процессор". будет работать успешно

Ответ 2

Причина заключается в том, что вы не хотите использовать больше памяти с 64-битными аппликациями. Это означает, что если ваше приложение является AnyCPU, вы хотите запустить его как 32 бит.

Чтобы добавить больше, параметр в Visual Studio нацелен на конкретный CLR:

Visual Studio устанавливает 32-разрядную версию CLR на компьютере x86, а также 32-разрядную версию и соответствующую 64-разрядную версию CLR на 64-разрядном компьютере под управлением Windows. (Поскольку Visual Studio представляет собой 32-разрядное приложение, когда оно установлено в 64-разрядной системе, оно работает под WOW64.)

Обратитесь к статье 64-разрядные приложения (MSDN).