Visual c++ 编译x64代码时,什么';这两者之间的区别是什么;x86“U amd64”;及;amd64;?

Visual c++ 编译x64代码时,什么';这两者之间的区别是什么;x86“U amd64”;及;amd64;?,visual-c++,visual-studio-2010,compiler-construction,64-bit,Visual C++,Visual Studio 2010,Compiler Construction,64 Bit,使用VC++编译代码时,可以选择使用x86_amd64工具集或amd64工具集(调用vcvarsall.bat时) 在编译x64代码时,如何在这两者之间进行选择?amd64选项是否会产生比交叉编译器更高效的x64机器代码?根据您的链接: x86上的x64(x64交叉编译器) 允许 您需要为x64创建输出文件。 此版本的cl.exe作为 32位进程,x86上的本机进程 机器和64位上的WOW64下 Widows操作系统 x64上的x64 允许您创建输出 x64的文件。此版本的cl.exe 在x64

使用VC++编译代码时,可以选择使用x86_amd64工具集或amd64工具集(调用vcvarsall.bat时)


在编译x64代码时,如何在这两者之间进行选择?amd64选项是否会产生比交叉编译器更高效的x64机器代码?

根据您的链接:

x86上的x64(x64交叉编译器)
允许 您需要为x64创建输出文件。 此版本的cl.exe作为 32位进程,x86上的本机进程 机器和64位上的WOW64下 Widows操作系统

x64上的x64
允许您创建输出 x64的文件。此版本的cl.exe 在x64上作为本机进程运行 机器

意译为:

如果您使用x86_amd64,那么您通常是在x86机器上开发的,并且您希望创建在x64上本机运行的x64文件。您也可以在x64计算机上使用此选项,但编译器将在WOW64仿真下运行

如果您使用AMD64,那么您是在x64计算机上开发的,您希望创建在x64上本机运行的x64文件。编译器在x64中本机运行。此选项对于构建x64程序更有效

您可能想知道为什么要在x86计算机上开发x64程序,因为您无法运行它,也无法调试它。例如,如果您有一个构建服务器是x86,并且该构建服务器需要同时生成x86和x64输出,那么它仍然很有用

如果编译器是基于x86的程序(x86_amd64),那么它如何可能在x64下运行?这与您可以在x64机器上运行任何x86程序的原因相同。。。感谢WOW64仿真

什么是WOW64仿真:

在x64计算机(或IA64)上运行x86程序时,会发生WOW64仿真。WOW64代表Windows 64上的Windows 32。它是x64机器上的一个仿真层,允许您执行x86程序

您的文件系统操作将重定向到WOW64文件夹,您的注册表也将重定向到子节点。例如,当您尝试获取程序文件文件夹时,如果您使用WOW64,它将返回
c:\program files(x86)\
,但如果您使用x64,它将返回
c:\program files\

另一个例子是,如果您尝试写入
HKLM\Software\Something
注册表,它会在您的x86程序不知情的情况下将您重定向到
HKLM\Software\Wow6432Node\Something

运行本机x64构建将比运行WOW64仿真更高效。为什么?因为您没有将32位调用转换为64位调用的额外仿真层


顺便说一句,如果您正在运行x64版本的Windows,您可以看到哪些进程正在通过WOW64运行,因为它们将在进程列表中的进程名称后面附加一个*32。

这与效率无关。本机编译器和交叉编译器都将生成相同的机器代码。但是,通过在64位工作站上运行本机64位编译器进程(更大的寄存器、更大的内存空间等),您将获得一些好处

本机编译器将仅在64位Windows副本上运行,因此如果您的工作站为32位,则此编译器甚至不会运行

交叉编译器旨在运行在x86机器上,即使它将通过WoW在64位Windows副本上运行;然而,没有理由这样做

您链接的页面很好地说明了这一点:

x86上的x64(x64交叉编译器)
允许 您需要为x64创建输出文件。 此版本的cl.exe作为 32位进程,x86上的本机进程 机器和64位上的WOW64下 Widows操作系统

x64上的x64
允许您创建输出 x64的文件。此版本的cl.exe 在x64上作为本机进程运行 机器

感谢提供报价格式


x86_amd64和amd64版本都创建x64本机可执行文件,这两个文件都将在64位操作系统上作为本机64位进程运行。WOW64用于在x64操作系统上运行32位本机可执行文件。x86编译器将生成本机32位可执行文件,该文件将在WOW64.@BrianR.Bondy下运行,但我仍然对amd64_x86选项感到困惑。我知道它允许工具集(cl/link)作为64位进程运行。好啊但是生成的二进制文件是针对x86体系结构的,对吗?后者究竟意味着什么?amd64_x86生成的64位二进制文件没有用?@BrianR.Bondy没关系。amd64_x86无法生成64位二进制文件。