指针偏移量会花费额外的时间吗?哪个更好?

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


要么

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

最佳答案

应优先考虑使用杂项,在现代体系结构中,这可能会更快,但永远不会更慢。


少一指令。指令解码是有限的资源。
代码序列的长度短一字节,因为偏移量在char范围内。这需要较少的缓存。
依赖链短了一条指令。在第一个序列中,地址计算j不必等待减量的结果。
地址计算以单独的单位进行。使用复杂的寻址模式时不会造成速度损失。


另一方面,递减的机会可能会被重新排序以便更早执行,因此不会在速度上有所不同。
http://www.agner.org/optimize/#manuals上查看更多背景信息。

关于optimization - 使用指针偏移量比在汇编程序中递减速度快吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9252512/

10-11 18:36