C# Visual Studio 2017在64位系统上以32位进行编译?

C# Visual Studio 2017在64位系统上以32位进行编译?,c#,c++,visual-studio,C#,C++,Visual Studio,我有一个64位操作系统和一个基于x64的处理器。然而,当我编译一个VisualStudio项目时,如果选择了“任意CPU”,它会编译成32位的可执行文件吗 那么这里发生了什么,为什么不编译为64位呢 我之所以需要编译64位是因为我想与64位非托管C++ DLL进行交互。 < P>在项目生成配置页上有一个“首选32位平台”复选框,您应该取消检查。 < P>项目构建页面上有一个“首选32位平台”复选框,您应该取消选中它。您的问题的答案是肯定的,即使在64位操作系统上,任何CPU在默认情况下都将编译为

我有一个64位操作系统和一个基于x64的处理器。然而,当我编译一个VisualStudio项目时,如果选择了“任意CPU”,它会编译成32位的可执行文件吗

那么这里发生了什么,为什么不编译为64位呢


我之所以需要编译64位是因为我想与64位非托管C++ DLL进行交互。

< P>在项目生成配置页上有一个“首选32位平台”复选框,您应该取消检查。

< P>项目构建页面上有一个“首选32位平台”复选框,您应该取消选中它。

您的问题的答案是肯定的,即使在64位操作系统上,任何CPU在默认情况下都将编译为x86。指向这一点的指针实际上是@Alexander Powolozki在其回答中所说的,例如“偏好32位”标志

引述

如果进程在64位Windows系统上运行,则它将作为32位进程运行。IL编译为x86机器代码

此设置的原因可能是此默认设置有助于您,因为

当应用程序可以在32位或64位模式下正常运行时,32位模式往往会快一点。更大的指针意味着更多的内存和缓存消耗,32位和64位进程可用的CPU缓存字节数相同。当然,WOW层确实增加了一些开销,但我看到的性能数字表明,在大多数真实场景中,在WOW中运行比作为本机64位进程运行要快

甚至(以及将所有库移植到64位的成本)

因此,除非您取消选中“prefer32位标志”,否则如果您还没有它,并且您可能知道,您应该在VisualStudio上创建x64平台,并将其用于此特定项目。 进入此窗口,单击“任意CPU”组合框:

并添加x64位平台:

这些图像适用于较旧版本的VisualStudio,但它在所有版本中都以类似的方式工作


书面说明。

您的问题的答案是肯定的,即使在64位操作系统上,任何CPU在默认情况下都将编译为x86。指向这一点的指针实际上是@Alexander Powolozki在其回答中所说的,例如“偏好32位”标志

引述

如果进程在64位Windows系统上运行,则它将作为32位进程运行。IL编译为x86机器代码

此设置的原因可能是此默认设置有助于您,因为

当应用程序可以在32位或64位模式下正常运行时,32位模式往往会快一点。更大的指针意味着更多的内存和缓存消耗,32位和64位进程可用的CPU缓存字节数相同。当然,WOW层确实增加了一些开销,但我看到的性能数字表明,在大多数真实场景中,在WOW中运行比作为本机64位进程运行要快

甚至(以及将所有库移植到64位的成本)

因此,除非您取消选中“prefer32位标志”,否则如果您还没有它,并且您可能知道,您应该在VisualStudio上创建x64平台,并将其用于此特定项目。 进入此窗口,单击“任意CPU”组合框:

并添加x64位平台:

这些图像适用于较旧版本的VisualStudio,但它在所有版本中都以类似的方式工作


书面说明。

请注意,当您调用非托管代码时,您需要将.NET代码编译为外部代码的特定位,或者为“任何CPU”.NET二进制文件”提供32位和64位库。@Greenbast:我可以问一下,您为什么不接受我的答案吗?Alexander,我接受您的答案(以及为什么我在上面打了标记-谢谢)。我也想在两个答案上打勾,但我只能选择一个。所以,因为弗朗西斯科给出了一个更详细/描述性的答案(也提到了你的答案)我觉得这是一个更好的选择。请注意,当您调用非托管代码时,您需要将.NET代码编译为外部代码的特定位,或者为“任何CPU”.NET二进制文件”提供32位和64位库。@Greenbast:我可以问一下,您为什么不接受我的答案吗?Alexander,我接受您的答案(以及为什么我在上面打了标记-谢谢)。我也想在两个答案上打勾,但我只能选择一个。所以,因为弗朗西斯科给出了一个更详细/描述性的答案(也提到了你的答案)我觉得这是一个更好的选择。感谢Francesco的回复。但我运行的是一个64位系统,据我所知,我不需要设置它。“任何CPU”都应该自动将其设置为64位(但它没有)。当我将其设置为64位平台时,我会得到windows命令控制台的响应(我仍在试图找出原因)甚至visual studio也不是64位的…哈哈,我没有想到这一点谢谢Francesco的回答。但我运行的是64位系统,根据我的说法,我不必设置它。“任何CPU”都应该自动将其设置为64位(但它没有)。当我将它设置为64位平台时,我会得到windows命令控制台响应(我仍在试图找出原因),即使visual studio不是64位的…哈哈,我没有想到这一点