16

Any CPU - Prefer 32 bit 选项有什么作用?

虽然我知道 WinRT 不能处理 exe 并且只能运行 Windows Store 应用程序,但StackOverflow存在几个问题,它们提出了相同的问题,并且都引用了这个博客,上面写着:

在 .NET 4.5 和 Visual Studio 11 中,奶酪已被移动。大多数 .NET 项目的默认值还是 AnyCPU,但现在 AnyCPU 的含义不止一种。AnyCPU 有一个额外的子类型,“Any CPU 32-bit Preferred”,这是新的默认值(总体而言,现在 /platform C# 编译器开关有五个选项: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 一样关注市场。显示的确切消息是:“此应用程序无法在您的 PC 上运行。要查找此 PC 的应用程序,请打开 Windows 应用商店。”

那么这实际上是做什么的,是否可以在 ARM 上为 Window RT 编译 Any CPU 应用程序?

4

2 回答 2

16

仅根据您指定的报价,它表明它意味着以下内容:

  • 如果 CPU 支持 32 位处理,那么最终的机器代码将是 32 位(ARM 或 x86,无所谓)。

  • 如果不是,那么机器代码将是 64 位的。

在过去,AnyCPU 的意思是“我与平台无关”。这通常意味着您将在 64 位平台上获得 64 位,否则将获得 32 位。

但是,即使在 64 位 CPU 上,您也可能需要 32 位是有原因的:指针大小只有一半,因此您使用的内存更少;代码更小,因此更适合缓存等。但是,没有办法强制 CLR 使用 32 位,并且在必要的情况下仍保留 64 位。

现在,使用 AnyCPU - 首选 32 位,您可以拥有自己的蛋糕(必要时支持 64 位)并吃掉它(可能时支持 32 位)

注意:如果我没记错的话,Itanium 将是一个只支持 64 位而不是 32 位代码的平台。可能有也可能没有其他人。

免责声明:我不是专家,这只是来自我在过去 6 个月左右阅读的各种博客文章

于 2012-10-31T03:27:29.070 回答
1

Windows RT 需要对 exe 文件进行签名才能运行。但是,如果你越狱你的 RT,那么它可以运行任何exe 文件,只要它在 ARM(.NET 或原生 ARM)应用程序上的 Windows 上受支持

有关此选项的更多信息,请参阅 .NET 4.5 和 Visual Studio 11 中 AnyCPU 的真正含义

于 2013-10-24T02:19:49.203 回答