我理解得对吗,if
语句更依赖于分支预测,v表查找更依赖于分支目标预测?关于v表,没有“分支预测”,只有目标预测?
尝试了解 CPU 如何处理 v 表。
分支预测是预测分支是否会出现taken。分支目标预测就是预测where分行要去。这两件事是独立的,并且可以以所有组合发生。
这些例子可能是:
无条件分支,固定目标
- 无限循环
-
goto
陈述
-
break
or continue
陈述
- 'then'子句的结尾
if/else
声明(跳过else
clause)
- 非虚函数调用
无条件分支,可变目标
- 从函数返回
- 虚函数调用
- 函数指针调用
-
switch
语句(如果编译成跳转表)
条件分支,固定目标
-
if
陈述
-
switch
语句(如果编译成一系列if/else
声明)
- 循环条件测试
- The
&&
and ||
运营商
- 三元
?:
操作员
条件分支,可变目标
- 在正常情况下不太可能出现,但编译器可能会结合上述两种情况综合一种作为优化。例如,在 x86 上,编译器可能会优化如下代码
if (condition) { obj->VirtualFunctionCall(); }
进入条件间接跳转,例如jne *%eax
如果由于尾部调用优化而出现在函数末尾。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)