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

Введите описание изображения здесь

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

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

Это так странно, что никто не ссылается на запись в блоге What AnyCPU действительно означает .NET 4.5 и Visual Studio 11 :

В .NET 4.5 и Visual Studio 11 сыр был перемещен. По умолчанию для большинства проектов .NET снова является AnyCPU, но теперь для AnyCPU существует более одного значения. Существует дополнительный подтип AnyCPU «Любой предпочтительный 32-битный процессор», который является новым по умолчанию (в целом, теперь есть пять опций для коммутатора компилятора / платформы C #: 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, но приложение «Любое CPU 32-битное предпочтительное» будет успешно работать.

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

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

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

См. Статью 64-разрядные приложения ( MSDN ).

  • Почему JVM-кеш JIT-скомпилированный код?
  • Почему Swift компилируется так медленно?
  • Есть ли способ скомпилировать исходные файлы node.js?
  • #ifdef #ifndef в Java
  • Как Eclipse компилирует classы только с JRE?
  • Как перекомпилировать с -fPIC
  • Почему GDB непредсказуемо скачет между строками и печатает переменные как «»?
  • Почему я получаю ошибку компиляции «org / codehaus / groovy / control / CompilationFailedException»?
  • Как заставить Visual Studio использовать встроенную привязку amd64
  • Использование G ++ для компиляции нескольких файлов .cpp и .h
  • Очень медленное время компиляции на Visual Studio 2005
  • Давайте будем гением компьютера.