如何向Visualc++编译器优化器提示不太可能执行if-语句的特定分支?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

我们有一个用于错误检查的宏,如下所示:

#define CheckCondition( x ) \
    if( x ) { \
    //okay, do nothing \
    } else { \
       CallFunctionThatThrowsException(); \
    }

通常条件必须是true,我们希望CPU分支预测总是选择这条路径,如果它碰巧是false我们并不真正关心错误预测 - 抛出异常并且大量堆栈解绕将总是花费大量值。

根据CPU硬核描述,分支预测将把前向跳转和后向跳转略微不同(类似于总是执行向后跳转并且从不执​​行向前跳转),编译器可以通过生成代码来改善分支预测, CPU分支预测器。

提问于
用户回答回答于

不幸的是,根据他们的开发者中心,不在MSVC 。

这非常令人沮丧,因为我们希望在几个情况下使用它,在这种情况下,等价的GCC内部函数为我们节省了几个微秒的内部循环,但最接近的是我们可以交换if和else子句,以便更多可能的情况是在未采取前向跳跃的分支。

用户回答回答于

扫码关注云+社区