多态的成本

时间:2014-03-08 04:13:31

标签: assembly x86 cpu branch-prediction

我在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页。

  1. 我是否正确,前两个MOV指令都只占用2个(它们都是移动存储器来注册)CPU周期?我认为对虚拟方法的调用比这慢?

  2. 在第178页的指令延迟表中,它表​​示此调用的延迟是2个CPU周期(我认为?)。 CALL'接近'意味着什么,而不是CALL'r'(注册)和CALL'm'(记忆)?

  3. 所以根据Fog小册子,上面的ASM确实需要6个CPU周期,我没有误解过任何东西?

  4. 编辑:我将虚函数调用更改为vtable中的第二个。

1 个答案:

答案 0 :(得分:4)