使用指针偏移比在汇编程序中递减更快吗?

时间:2012-02-12 20:45:59

标签: optimization assembly x86-64

指针偏移是否需要额外的时间?哪个更好?

mov rcx, length
dec rcx
mov rax, qword ptr [rsi+rcx*8]

mov rcx, length
mov rax, qword ptr [rsi+rcx*8-8]

1 个答案:

答案 0 :(得分:4)

使用offest应该是首选,在现代架构上,这可以更快,但从不慢。

  • 少一个指令。指令解码是一种有限的资源。
  • 代码序列的长度缩短一个字节,因为偏移量在char范围内。这需要更少的缓存。
  • 依赖关系链是一条指令。在你的第一个序列中,地址计算必须等待减量的结果。
  • 地址计算以单独的单位完成。使用复杂的寻址模式时没有速度损失。

另一方面,有可能将减量重新排序以便更早执行,因此速度不会有明显的差别。 请参阅http://www.agner.org/optimize/#manuals上的更多背景信息。