Какова цель настройки "предпочесть 32-разрядный" в Visual Studio 2012 и как она на самом деле работает?

Enter image description here

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

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

2 ответов


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

в .NET 4.5 и Visual Studio 11 сыр был перемещен. Этот по умолчанию для большинства проектов .NET снова AnyCPU, но есть больше, чем одно значение для AnyCPU сейчас. Существует дополнительный подтип AnyCPU, "Любой процессор 32-бит предпочтительнее", что является новым значением по умолчанию (в целом, там теперь пять вариантов / переключатель компилятора платформы C#: x86, Итаниум, х64, любой ЦП, и anycpu32bitpreferred). При использовании " Prefer 32-Bit" аромат AnyCPU, семантика такова:

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

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


причина: в случае, если вы не хотите использовать больше памяти с 64 бит которых. Что означает, если ваше приложение любой ЦП, вы хотите работать как 32 бит.

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

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

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