Met*_*eta 31 compiler-construction 64-bit visual-studio-2010 visual-c++
使用VC++编译代码时,MSDN为您提供了使用x86_amd64工具集或amd64工具集(调用vcvarsall.bat时)之间的选项.
编译x64代码时如何在这两者之间进行选择?amd64选项是否会产生比交叉编译器更高效的x64机器代码?
jos*_*rry 25
它与效率无关.本机和交叉编译器都将生成相同的机器代码.但是,通过在64位工作站上运行本机64位编译器进程(更大的寄存器,更大的内存空间等等),您将获得一些好处.
本机编译器只能在64位的Windows副本上运行,因此如果您的工作站是32位,则此编译器甚至不会运行.
交叉编译器意味着在x86机器上运行,即使它将通过WoW在64位Windows副本上运行; 但是,没有理由这样做.
您链接的页面说得很好:
x86上的x64(x64交叉编译器)
允许您为x64创建输出文件.此版本的cl.exe作为32位进程运行,在x86计算机上本机,在64位Widows操作系统下在WOW64下运行.x64 on x64
允许您为x64创建输出文件.此版本的cl.exe在x64计算机上作为本机进程运行.感谢Brian R. Bondy的报价格式
Bri*_*ndy 11
从您链接的内容:
x86上的x64(x64交叉编译器)
允许您为x64创建输出文件.此版本的cl.exe作为32位进程运行,在x86计算机上本机,在64位Widows操作系统下在WOW64下运行.x64 on 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文件夹,您的注册表也将重定向到子节点.例如,当您尝试获取程序文件的文件夹时,c:\program files (x86)\如果您使用的是WOW64,它将返回,但c:\program files\如果您使用的是x64 ,它将返回.
另一个例子,对于注册表,如果你尝试写入HKLM\Software\Something它将真正重定向到你HKLM\SOFTWARE\Wow6432Node\Something没有你的x86程序的知识.
运行本机x64构建比运行WOW64仿真更有效为什么?因为您没有额外的仿真层将32位调用转换为64位调用.
顺便说一下,如果您运行的是x64版本的Windows,您可以看到哪些进程正在通过WOW64运行,因为它们将在进程列表中的进程名称后附加*32.