我们有一个用于错误检查的宏,如下所示:
#define CheckCondition( x ) \
if( x ) { \
//okay, do nothing \
} else { \
CallFunctionThatThrowsException(); \
}
通常条件必须是
true
并且我们希望 CPU 分支预测始终选择这条路径,如果它碰巧是 false
,我们并不真正关心错误预测 - 抛出异常和大量错误无论如何,堆栈展开将花费一大笔钱。
根据CPU硬核描述,分支预测对前向跳转和后向跳转的处理方式略有不同(例如总是执行后向跳转,而从不执行前向跳转),并且编译器可以通过生成给出正确提示的代码来改进分支预测。 CPU 分支预测器。
likely
和 unlikely
提示。 Visual C++中有类似的东西吗?可以使用__assume
关键字吗?