当必须首先向其添加偏移量时,是否需要额外的周期来取消引用内存地址?

cle*_*ong 2 x86 assembly

是否mov 0x10(%esp),%esi需要更多时间才能完成mov (%ebx),%esi现代CPU?

Dir*_*ple 5

根据英特尔优化手册表2-8,在Sandy Bridge上,基本寄存器或基数的加载延迟加上小于2048的偏移量是4个周期,而对于基数加索引加上偏移量或基数加上偏移量2048或更高是5个循环.因此,在您的示例中,两条指令应该花费相同的时间.如果您使用的偏移量为2048或更高,则需要更长时间.

当然,如果内存不在你的L1缓存中,这并不重要,因为内存访问的成本会使其他所有内容的成本相形见绌.