我理解正确吗,if
语句更依赖于分支预测,而v-table查找更依赖于分支目标预测?关于v-tables,没有“分支预测”,只有目标预测吗?
试图理解CPU如何处理v-table。
我理解正确吗,if
语句更依赖于分支预测,而v-table查找更依赖于分支目标预测?关于v-tables,没有“分支预测”,只有目标预测吗?
试图理解CPU如何处理v-table。
goto
语句
- break
或continue
语句
- if/else
语句的“then”子句结束(跳过else
子句)
- 非虚函数调用switch
语句(如果编译成跳转表)if
语句
- switch
语句(如果编译成一系列if/else
语句)
- 循环条件测试
- &&
和 ||
操作符
- 三元?:
运算符if (condition) { obj->VirtualFunctionCall(); }
的代码优化为条件间接跳转,如 jne *%eax
,如果它出现在函数末尾。
if
和一般循环使用分支预测(布尔输出),而函数指针/虚函数使用分支目标预测(目标输出)。 - Matthieu M.