32位操作与64位机器/操作系统上的64位操作

pat*_*_en 5 32bit-64bit

在64位计算机上,哪项操作(即32位操作或64位操作(如屏蔽32位标志或64位标志))会更便宜?

Jas*_*ams 4

由于您没有指定架构,我只能建议一个一般答案,因为它取决于操作和所讨论的处理器架构。一旦 CPU 寄存器中有数据,大多数操作通常会花费相同的时间,无论该值最初是 32 位还是 64 位。

然而,在某些架构上,数据进入寄存器的方式可能存在一些差异。在某些情况下,“本机”值可能比某些硬件上的较小值更快:

获取数据

  • 获取“本机大小”的值可能比获取较小的值更快。也就是说,无论如何,处理器可能需要获取 64 位,然后屏蔽/移出其中的 32 位以“加载”32 位值。处理 64 位值时不需要这种掩码/移位,因此它可能会加载得更快。(这违背了直觉,即两倍大的东西可能需要两倍的时间来加载)。

  • 或者,如果总线可以处理半角读取,则可以与 64 位值同时加载 32 位。

  • 更令人困惑的是,CPU 缓存也可以改变结果。通常,当您从内存中读取一个值时,会将多个内存位置的“行”读入高速缓存,以便可以从快速高速缓存内存中提供后续读取,而不需要从 RAM 中进行完整读取。在这种情况下,如果您按顺序访问许多值,则使用 32 位值会更快,因为将缓存其中两倍的值,从而减少缓存未命中。

计算

  • 处理器硬件针对处理 64 位值进行了优化,因此使用 32 位计算值可能会带来更多麻烦,从而降低运行速度。例如,它可能能够“本机”处理双精度(64 位)值,但必须先将浮点(32 位)值转换为双精度,然后才能处理它,然后将结果转换回浮点。

  • 或者,可能存在通过 CPU 的 32 位和 64 位路径,或者 CPU 可能能够以不影响指令整体执行时间的方式进行所需的任何转换,在这种情况下,可以计算它们以相同的速度。

  • 这可能会影响复杂的运算(浮点),但不太可能成为简单运算(AND、OR 等)的问题