我在x86-64中查看下面的虚方法调用:
mov rcx, qword ptr [x]
mov rax, qword ptr [rcx]
call qword ptr [rax+8]
以及Agner Fog的延迟表:
http://www.agner.org/optimize/instruction_tables.pdf
当我使用Ivy Bridge CPU时,我正在查看第175页。
我是否正确,前两个MOV指令都只占用2个(它们都是移动存储器来注册)CPU周期?我认为对虚拟方法的调用比这慢?
在第178页的指令延迟表中,它表示此调用的延迟是2个CPU周期(我认为?)。 CALL
'接近'意味着什么,而不是CALL
'r'(注册)和CALL
'm'(记忆)?
所以根据Fog小册子,上面的ASM确实需要6个CPU周期,我没有误解过任何东西?
编辑:我将虚函数调用更改为vtable中的第二个。
答案 0 :(得分:4)