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

标签 c++ visual-c++ optimization compiler-construction compiler-optimization

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

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

通常条件必须为 true,我们希望 CPU 分支预测始终选择这条路径,如果它恰好是 false,我们不这样做'真的不在乎预测错误 - 抛出异常和大量堆栈展开无论如何都会花费一大笔钱。

根据 CPU 核心描述,分支预测将处理前向跳转和后向跳转略有不同(例如总是执行后向跳转而从不执行前向跳转),编译器可以通过生成正确的代码来改进分支预测提示 CPU 分支预测器。

gcc 好像有 likely and unlikely hints为了那个原因。 Visual C++ 中有类似的东西吗?可以__assume keyword用于那个?

最佳答案

不幸的是,根据 their developer center,不在 MSVC 中.

这非常令人沮丧,因为我们希望在等效的 GCC 内在循环中为我们节省了关键的几微秒内循环的情况下使用它,但我们能得到的最接近的方法是交换 if 和 else 子句,所以更可能的情况是前向跳转未采取分支。

关于c++ - 如何提示 Visual C++ 编译器优化器不太可能执行 if 语句的特定分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5075164/

相关文章:

十进制转十六进制的C++程序

c++ - 我可以设置通过跳转列表启动的任意进程的 AppUserModelID 吗?

visual-studio - 如何在 Visual Studio 2013 中写入输出窗口?

python - 具有行业级约束的 SciPy 投资组合优化

c++ - 使用自定义特征和 bool 类型的 c++11 枚举时出现 clang 编译错误

c++ - 在 C++ 中未检测到相机,但在 QML 中检测到

c++ - 为什么*everything* 在 ATL/WTL 中使用模板基类?

C++ 静态与非静态类成员

mysql - 高效的sql内连接查询

python - 安装 IPOPT 求解器以在 Windows 中与 pyomo 一起使用