c++ - 性能 32 位与 64 位算术

标签 c++ c linux performance x86-64

native 64 位 整数算术指令比它们的 32 位 计数器部件慢(在 x86_64 机器上使用 64 位操作系统)?

编辑:在当前的 CPU 上,例如 Intel Core2 Duo、i5/i7 等。

最佳答案

这取决于确切的 CPU 和操作。例如,在 64 位 Pentium IV 上,64 位寄存器的乘法运算要慢很多。 Core 2 及更高版本的 CPU 从头开始​​设计用于 64 位操作。

通常,即使是为 64 位平台编写的代码也使用 32 位变量,其中值适合它们。这主要不是因为算术更快(在现代 CPU 上,通常不是),而是因为它使用更少的内存和内存带宽。

如果这些整数是 32 位的,则包含十几个整数的结构的大小将是 64 位的一半。这意味着它需要一半的字节来存储,一半的缓存空间,等等。

64 位 native 寄存器和算术用于可能不适合 32 位的值。但主要的性能优势来自 x86_64 指令集中可用的额外通用寄存器。当然,还有 64 位指针带来的所有好处。

所以真正的答案是这并不重要。即使您使用 x86_64 模式,您仍然可以(并且通常这样做)仍然可以使用 32 位算术,并且您可以获得更大的指针和更通用的寄存器的好处。当您使用 64 位 native 操作时,这是因为您需要 64 位操作,并且您知道它们比使用多个 32 位操作伪造它要快——您唯一的选择。因此,32 位与 64 位寄存器的相对性能永远不应成为任何实现决策的决定因素。

关于c++ - 性能 32 位与 64 位算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8948918/

相关文章:

C++ 将字符串添加到现有文本文件

c - lua中如何实现接口(interface)?

c - 一次从数组读取两个字节?

c - malloc 在不同的机器上表现不同

linux - 什么时候调用setsockopt?在 bind() 和 connect() 之前?

c++ - 为什么我的简单 C++ 控制台应用程序在 Visual Studio 2015 中看不到我的简单 C++ 静态库 header ?

c++ - Cppcheck 说 char[256] 应该在构造函数的初始化列表中初始化

c++ - 模板简化

c - 配置 Visual Studio 进行调试时出现“访问被拒绝”错误

linux - EPOLLET 模式下的 Epoll 在从套接字读取之前返回 2 EPOLLIN