为 32 位或 64 位编译

标签 c compilation 32bit-64bit

我正在编写一个应用程序,我想知道我应该在 32 位模式还是 64 位模式下编译它。该程序不使用任何 64 位类型,也不访问超过 4 GB 的内存(而且我不打算访问那么多内存)。我可以看到使用 64 位模式相对于 32 位模式的唯一优势是 64 位模式允许访问更多的寄存器,但是在大多数情况下使用 32 位模式相对于 64 位模式肯定有一些好处的 64 位功能没有被使用(除了更小的指令和指针,因为我不担心我的程序溢出缓存)。使用 32 位是否有一些好处,例如更快的指令或更少的能耗,这应该导致我改为编译 32 位。谢谢。

最佳答案

取决于应用类型。

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

OTOH 在某些情况下,为 32 位编译的代码将具有显着优势,因为 native 指针较小。

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

因此,如果您的应用程序没有达到 32 位限制,使用带有 native 指针的复杂数据结构,并且性能很关键 - 32 位可能是一个可行的方法。否则我建议切换到 64 位。

关于为 32 位或 64 位编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48964745/

相关文章:

c - 如何在没有内存错误的情况下读取堆中大文件的内容

windows - 为什么进程不能在 32 位系统中寻址 4GB 内存?

java - 在另一个 void 函数中传递一个私有(private) void 函数(编译错误 java)

c - size_t 是便携的吗?

java - 如何在 Java 中确定另一个进程或可执行文件是 32 位还是 64 位

c++ - 为什么我得到的 C 程序值是垃圾值?

c - C中的按位结构编程

c - Valgrind "Invalide write of size 1"

android - 无法编译 Vitamio demo

javascript - Webpack typescript 导入未定义