任何处理器 - 偏向32位

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”(任意CPU优选32位),这是新的默认值(总体上,/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 Store。”那么这实际上是做什么的?是否可能为ARM上的Window RT编译Any CPU应用程序?

1
操作系统告诉你无法运行程序的原因是什么?是由于CPU不兼容,还是其他原因? - Greg Hewgill
更新的问题。 准确的消息显示为:“此应用程序无法在您的计算机上运行。 要查找适用于此计算机的应用程序,请打开Windows Store。” 当尝试运行其他exe文件(例如Chrome安装程序)时,出现相同的消息。 - Dragonseer
4
Windows RT无法运行桌面应用程序(普通的.exe文件)。您必须创建一个市场应用程序才能在Surface上运行它。 - m0sa
@m0sa:没错,这也是我的理解。然而,当我看到这篇博客文章和StackOverflow上的问题时,我决定研究一下“任何CPU-32位优先”实际上是做什么的。这篇博客文章在互联网上被引用了好几个地方,包括在StackOverflow上,所以我正在努力确定它是否有一定的价值。 - Dragonseer
只需获取开发人员许可证:http://msdn.microsoft.com/zh-cn/library/windows/apps/hh974578.aspx,这样您就可以将应用程序部署到您的计算机上。 - NotMe
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个月左右阅读的各种博客文章中的一些信息。


3
WoW64 是服务器上的一个可选安装。 - Mark Sowul
如果用户可以选择在某一天内存不足,只想使用小数据运行应用程序,那么32位就足够了;而在另一天,他可以运行支持完整64位的AnyCPU应用程序,那将是非常酷的。 或者使用DirectShow(或其他类似框架)的应用程序在x86或x64下表现完全不同。 - springy76
据我所知,Ia64与常规的x64不兼容 - 你必须专门针对Ia64进行编写,是吗? - BrainSlugs83
使用32位还是64位的争论尚无定论。双方都有利弊,64位处理器可以更快地处理64位变量,但它们需要更多的内存等。 - einord

1

"奶酪已经被移动了" -- 链接到引发这个问题的博客文章可能会创建一个堆栈溢出 ;-) - springy76

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接