首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在编译x64代码时,"x86_amd64“和"amd64”有什么区别?

在编译x64代码时,"x86_amd64“和"amd64”有什么区别?
EN

Stack Overflow用户
提问于 2010-08-18 09:01:11
回答 1查看 31.2K关注 0票数 43

在使用VC++编译代码时,MSDN允许您选择使用x86_amd64工具集或amd64工具集(在调用vcvarsall.bat时)。

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

EN

回答 1

Stack Overflow用户

发布于 2010-08-18 09:11:05

来自您链接的

x64 on x86 (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程序时,就会发生x64仿真。WOW64代表Windows64上的Windows32。它是x64机器上的一个仿真层,允许您执行x86程序。

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

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

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

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

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3508173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档