2012-05-10 40 views
22

对于任何VS项目,都可以在该项目的构建属性中设置平台目标。您可以将其设置为任何CPU,x86,x64或Itanium。我的问题是,如果我将这个值设置为x86,这是否意味着我无法在x64机器上运行该项目?如果是这样,为什么这甚至被使用?只是总是使用任何CPU不是更好吗?为Visual Studio应用程序设置平台目标的目的是什么?

回答

30

如果我将此值设置为x86是否意味着我无法在x64机器上运行该项目?

不,32位应用程序(x86)在64位Windows(x64)上运行良好。所有64位版本的Windows都包含一个称为Windows(Windows)64(WOW64)的32位兼容层。实际上,这是通常是,因为大多数应用程序不会从64位编译中受益。

但是,编译64位(x64)确实表示您的应用程序无法在32位(x86)计算机上运行。你可以去倒退(64位可以运行32位),但你不能去转发(32位不能运行64位)。

正如你指出的那样,编译Any CPU总是一个选项。这将允许应用程序在32位机器上作为32位应用程序(x86)运行,并在64位机器上作为64位应用程序(x64)运行。这听起来像是灵丹妙药,但也有成本。最值得注意的是,您需要在这两个 32位和64位环境中广泛地测试您的应用程序,而如果您仅针对32位环境(包括64位主机上的32位环境),则仅限于必须测试一个版本。额外的工作负载很少值得 - 大多数业务应用程序不会从64位环境的额外内存空间中受益,并且可能最终由于64位指针的开销增加而击败任何潜在收益。

Visual Studio本身就是完全32位应用程序的一个很好的例子。没有64位版本,但它在64位主机上运行良好。 This blog post有助于阐明为什么决定保持VS 32位。你可能会发现推理有助于你自己做出决定。同样,尽管微软Office现在可以使用64位软件包,但微软仍然建议的大多数客户坚持使用32位版本。 64位版本存在兼容性问题,并没有太大的好处。

+2

“大多数应用程序不受益于64位编译”。这是个谎言。 WOW64层具有与之相关的内在开销,更有效地布置堆并且ASLR保护机制具有更多的熵位以保护您的应用程序在64位上。 – SecurityMatt

+6

我没有说没有好处。我说过,至少在这一点上,缺点基本上“冲淡”了优势。这将是几年内可能会发生变化的事情之一,我不会记得回头更新我的答案。 –

+0

你们的评论非常有见地。这就是StackOverflow的全部内容。谢谢。 –

1

如果您没有指定32位平台,则Microsoft应用程序兼容性工具包无法确定该应用程序为32位,并且不允许您创建32位解决方案文件,以允许应用程序在用户帐户控制时无需管理员凭据即可运行已启用

相关问题