代码之家  ›  专栏  ›  技术社区  ›  Meta

在编译x64代码时,它们之间有什么区别“x86\u amd64” 以及“amd64型”?

  •  28
  • Meta  · 技术社区  · 14 年前

    用VC++编译代码时, MSDN 提供使用x86\u amd64工具集或amd64工具集(调用时)之间的选项vcvarsall.bat公司).

    2 回复  |  直到 14 年前
        1
  •  31
  •   Community CDub    8 年前

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

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

    你链接的页面上写得很好:


    允许 此版本的cl.exe 作为一个 机器和64位上的WOW64下 Widows操作系统。


    允许您创建输出 在x64上作为本机进程运行

    Brian R. Bondy

        2
  •  17
  •   Brian R. Bondy    14 年前

    从您链接的内容:


    允许 您需要为x64创建输出文件。 此版本的cl.exe 作为一个 32位进程,在x86上本机 机器和64位上的WOW64下

    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\u amd64),它怎么可能在x64下运行?这与您可以在x64机器上运行任何x86程序的原因相同。。。感谢WOW64仿真。

    什么是WOW64仿真:

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

    HKLM\Software\Something 它真的会把你引向 HKLM\SOFTWARE\Wow6432Node\Something

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