Какова цель настройки "Prefer 32-bit" в Visual Studio 2012 и как она работает на самом деле?


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

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

2 170

2 ответа:

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

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

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

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

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

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

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

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