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

Fal*_*nUA 7 c++ branch-prediction c++20

初步信息:根据最近的ISO C ++委员会旅行报告,将在最新版本的GNU GCC中添加并提供条件分支的[[ likely ]][[ unlikely ]]属性C++20(您可以在在线编译器wandbox.org上使用它)。


问题:以下构造

if (cond) [[ likely ]] { ... }
Run Code Online (Sandbox Code Playgroud)

相当于以下一个?

if (__builtin_expect(bool(cond), 1)) { ... }
Run Code Online (Sandbox Code Playgroud)

为了有效使用它,不同编译器之间是否存在性能差异或实现细微差别?

Vit*_*meo 9

以下构造是否等同于以下构造?

故意是的。


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

P0479可以看到,这些属性的行为没有强制性的措词要求。在非规范性注释中提到了它们的行为,鼓励但不强制执行这些实现。

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

  • 我要补充一点,__builtin *是编译器的内在函数,而[[可能]]将成为一种语言标准,如果这还不是很明显的话。 (4认同)