Любой процессор - Предпочитаете 32 бит
Что делает любой процессор - предпочитает 32-битный вариант?
Хотя мне известно, что WinRT не может работать с exe и может работать только с приложениями Windows Store, есть несколько вопросов существуют на qaru.site/info/43183/..., которые задают один и тот же вопрос, и оба ссылаются на этот blog, который гласит:
В .NET 4.5 и Visual Studio 11 сыр перемещен. По умолчанию для большинства проектов .NET это снова AnyCPU, но есть более одного теперь это означает AnyCPU. Существует дополнительный подтип AnyCPU, "Любой CPU 32-bit preferred", который является новым значением по умолчанию (в целом, есть теперь пять вариантов для/компилятора С#: x86, Itanium, x64, anycpu и anycpu32bitpreferred). При использовании этого аромата AnyCPU, семантика:
- Если процесс выполняется в 32-разрядной системе Windows, он запускается как 32-разрядный обработать. IL компилируется в машинный код x86.
- Если процесс выполняется в 64-разрядной системе Windows, он запускается как 32-разрядный обработать. IL компилируется в машинный код x86.
- Если процесс выполняется в системе ARM Windows, он работает как 32-разрядный процесс. IL скомпилирован в машинный код ARM.
Однако после покупки моей Surface RT я создал программу Hello World, установил ее в Any CPU, проверил флаг Prefer 32 Bit, скомпилировал и скопировал ее на мою Surface. Когда я запускал программу, операционная система рассказала мне, что она не может запустить программу и что я должен смотреть на рынок, как и для любого x86/x64 exe. Точное отображаемое сообщение: "Это приложение не может работать на вашем ПК. Чтобы найти приложения для этого ПК, откройте" Магазин Windows ".
Итак, что это на самом деле делает и можно ли скомпилировать любое приложение CPU для Window RT на ARM?
Ответы
Ответ 1
Основываясь исключительно на указанной вами цитате, она предполагает, что это означает следующее:
-
Если процессор поддерживает 32-битную обработку, то окончательный машинный код будет 32-битным (ARM или x86, не имеет значения).
-
Если нет, тогда машинный код будет 64-битным.
В старые времена AnyCPU означало "я агностик платформы". Это обычно означало, что вы получите 64-битные на 64-битных платформах и 32-разрядные в противном случае.
Однако есть причины, по которым вам может понадобиться 32-разрядная версия даже на 64-битном процессоре: указатели имеют половину размера, поэтому вы используете меньше памяти; код меньше, поэтому он больше вписывается в кеш и т.д. Но не было никакого способа заставить CLR использовать 32-битную и по-прежнему сохранять 64-бит в тех случаях, когда это было необходимо.
Теперь, когда AnyCPU - желательно 32 бит, вы можете получить свой торт (при необходимости 64-бит) и съесть его (возможно 32-битная поддержка)
Примечание. Если я не ошибаюсь, Itanium будет платформой, которая поддерживает только 64-битный, а не 32-разрядный код. Там могут быть или не быть другие.
Отказ от ответственности: я не эксперт, это просто из разных сообщений в блогах, которые я читал за последние 6 месяцев или около того
Ответ 2
Windows RT требует, чтобы файлы exe подписывались для его запуска. Но если вы джейлбрейк вашего RT, то он может запустить exe файл любой, если он поддерживается в Windows на ARM (.NET или родные приложения ARM)
Подробнее об этой опции в Что AnyCPU действительно имеет значение с .NET 4.5 и Visual Studio 11