c++ - 将 32 位 C++ 代码移植到 64 位 - 值得吗?为什么?

标签 c++ x86 64-bit x86-64 cpu-architecture

我知道 x64 架构的一些明显优势(更高的可寻址 RAM 地址等)...但是:

  • 如果我的程序没有真正需要在 native 64 位模式下运行怎么办。我还是应该移植它吗?
  • 终止 32 位支持是否有任何可预见的截止日期?
  • 我的应用程序会像原生 x64 代码一样运行得更快/更好/更安全吗?

最佳答案

x86-64 有点特殊——对于许多架构(例如 SPARC),为 64 位模式编译应用程序不会给它带来任何好处,除非它可以有利地使用超过 4GB 的内存。它所做的只是增加二进制文件的大小,如果它影响缓存行为,实际上会使代码变慢

但是,x86-64 不仅为您提供了 64 位地址空间和 64 位整数寄存器 - 它还使通用寄存器的数量加倍,这在像 x86 这样的寄存器不足架构上只需重新编译即可显着提高性能。

它还让编译器假设存在许多扩展,例如 SSE 和 SSE2,这也可以显着改进代码优化。

另一个好处是 x86-64 增加了 PC 相对寻址,可以显着简化与位置无关的代码。

但是,如果应用程序对性能不敏感,那么这些都不是真正重要的。

关于c++ - 将 32 位 C++ 代码移植到 64 位 - 值得吗?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1479953/

相关文章:

c++ - 使用 Rapidjson 写入文件

c++ - 是否可以用 lambda 初始化静态变量?

c++ - kevent.ident 是无符号整数,而文件描述符是有符号的?

assembly - 使用 objdump 时确定寄存器值

c++ - 32 位和 64 位 Windows 上的注册表

linux - 如何在 makefile 中将您的项目链接到 64 位库

c++ - 编译器错误 :falied to determine size of array size identifier

assembly - 无法理解调用者不需要清理堆栈的 cdecl 调用约定示例

linux - 从 perf 获取 PEBS 数据线性地址

c - 64 位中的 setjmp/longjmp