代码之家  ›  专栏  ›  技术社区  ›  Cpp plus 1

为32位或64位编译

  •  5
  • Cpp plus 1  · 技术社区  · 7 年前

    我正在写一个应用程序,我想知道是应该在32位模式还是64位模式下编译它。该程序不使用任何64位类型,也不会访问超过4G的内存(我也不打算让它访问那么多内存)。使用64位模式而非32位模式的唯一优点是,64位模式允许访问更多寄存器,但当大多数64位功能未被使用时(除了较小的指令和指针,因为我不担心程序溢出缓存),使用32位模式而非64位模式一定有一些好处。使用32位是否有一些好处,例如更快的指令或更少的能耗,这应该导致我转而编译32位。非常感谢。

    5 回复  |  直到 7 年前
        1
  •  3
  •   valdo    7 年前

    取决于应用程序类型。

    正如其他人提到的,32位平台被视为不推荐使用,在64位平台上运行32位应用程序会带来一些开销。此外,正如您所提到的,编译器可以访问更多的寄存器和更高级的指令集。

    由于本机指针的大小较小,在某些情况下,为32位编译的代码将具有显著的优势。

    例如,我有一个带有“算法”代码的应用程序,它处理存储在具有交叉指针的复杂数据结构中的大型数据集。为32位平台编译的同一应用程序的内存占用明显更小,运行速度也更快。

    因此,如果您的应用程序没有达到32位的限制,可以使用本机指针处理复杂的数据结构,并且性能至关重要—32位可能是一种可行的方法。否则,我建议切换到64位。

        2
  •  3
  •   Andrew Henle    7 年前

    64位模式下的寄存器访问改进是正确的,但您可能不知道差异有多大。

    Per Wikipedia :

    从AMD Opteron处理器开始,x86架构得到了扩展 将32位寄存器转换为64位寄存器的方式类似于 进行了16到32位扩展。R前缀标识64位 寄存器(RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、RFLAGS、RIP)和 另外还有八个64位通用寄存器(R8-R15) 在创建x86-64时引入。 但是,这些扩展是 仅在64位模式下可用 ...

    在x86上,以64位模式运行可以访问16个64位寄存器。在32位模式下,您只能访问8个32位寄存器。

    而且,由于在任何情况下都有三个寄存器是程序计数器、堆栈指针和帧指针,因此可用的通用寄存器之间的差异更大。

    因此,只需将编译标志从 -m32 -m64 .

    除非您有特定的需要部署在较旧的32位硬件或操作系统上,否则没有理由编译32位x86应用程序。

    在将代码移植到64位时要小心。仍然有太多的程序员将指针和 int s和 long s

        3
  •  2
  •   AndreyKarpov    7 年前

    WoW64 在…上 Intel 64 (AMD64/x64)不需要指令模拟。在这种情况下,WoW64子系统通过32位应用程序和64位Windows API之间的附加层,仅模拟32位环境。在某些地方,这一层很薄,而在其他地方,这一层稍厚一些。对于一个普通的程序,您可能会因为这个层而期望2%的性能损失。对于某些程序,它可以更大。2%并不多,但请记住,在64位Windows下,32位应用程序的工作速度比在32位环境下慢一些。

    编译64位代码不仅可以避免使用WoW64,还可以提高性能。这可以通过微处理器中的架构修改来解释,例如通用寄存器数量的增加。对于一个普通的程序,仅在重新编译之后,您可能会期望性能提高5-15%。

    由于WoW64层,32位程序在64位环境中的效率低于其本机32位环境。然而,简单的32位应用程序仍然可以从在64位环境中执行中获得一个好处。也许您知道,如果使用开关“/3gb”启动32位Windows,那么使用开关“/LargeAddressWare:YES”构建的程序最多可以分配3gb内存。嗯,在64位系统上构建的同一个32位程序可以分配几乎4 GB的内存(实际上通常是3.5 GB左右)。

    P、 另请参见“第2课”。 Support of 32-bit applications in the 64-bit Windows environment ".

        4
  •  1
  •   Ctznkane525    7 年前

    使用64位,因为在64位环境中运行32位有开销(尽管很小)。

        5
  •  1
  •   bolov    7 年前

    为什么不同时用这两种语言编译呢?

    我推荐64位(AMD 64)。32位(x86)应用程序除了与非常旧的计算机兼容之外,没有其他优势。我相信比我知识更渊博的人可以指出AMD 64相对于x86的一些技术优势,但我怀疑这些不会对您的平均应用程序产生真正的影响。

    但是,没有什么可以阻止您编译和分发这两个版本。