我是否理解对了,if
语句更依赖于分支预测,而 v-table 查找更依赖于分支目标预测?关于v-tables,没有“分支预测”,只有目标预测?
试图了解 CPU 是如何处理 v-table 的。
我是否理解对了,if
语句更依赖于分支预测,而 v-table 查找更依赖于分支目标预测?关于v-tables,没有“分支预测”,只有目标预测?
试图了解 CPU 是如何处理 v-table 的。
分支预测是预测分支是否会被采用。分支目标预测是分支要去哪里的预测。这两件事是独立的,可以在所有组合中发生。
这些例子可能是:
goto
陈述break
或continue
声明if/else
(跳过该else
子句)switch
语句(如果编译成跳转表)if
陈述switch
语句(如果编译成一系列if/else
语句)&&
符||
?:
运算符if (condition) { obj->VirtualFunctionCall(); }
为条件间接跳转,就像jne *%eax
由于尾调用优化而出现在函数末尾一样。