C ++ 20:[[可能]],[[不太可能]]和__builtin_expect之间的区别?

时间:2019-07-18 12:22:27

标签: c++ c++20 branch-prediction

初步信息:根据最近的ISO C++ Committee Trip Report,将在[[ likely ]]中添加用于条件分支的[[ unlikely ]]C++20属性,并且在最新版本的GNU中可用GCC(您可以在在线编译器wandbox.org上使用它)。


问题:以下结构

if (cond) [[ likely ]] { ... }

等于下一个吗?

if (__builtin_expect(bool(cond), 1)) { ... }

为了有效地使用它,编译器之间是否应该意识到性能差异或实现细微差别?

1 个答案:

答案 0 :(得分:8)

  

以下构造等同于以下构造吗?

是的,是的。


  

为了有效地使用它,编译器之间是否应该意识到性能差异或实现细微差别?

P0479中可以看到,对这些属性的行为没有强制性的措词要求。他们的行为作为非规范性注释的一部分被提及,该实现被鼓励,但没有被强制遵循。

回答这个问题的唯一方法是检查编译器的手册。