【问题标题】:C++20: difference between [[likely]], [[unlikely]] and __builtin_expect?C++20:[[likely]]、[[unlikely]] 和 __builtin_expect 之间的区别?
【发布时间】:2019-11-27 09:08:10
【问题描述】:

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


问题:是下面的构造

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

相当于下面的一个?

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

为了有效地使用不同的编译器,是否有任何性能差异或实现上的细微差别?

【问题讨论】:

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


    【解决方案1】:

    下面的构造等价于下面的构造吗?

    有意,是的。


    为了有效地使用它,跨编译器是否存在性能差异或实现上的细微差别?

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

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

    【讨论】:

    • 我要补充一点,__builtin* 是一个编译器内在函数,而 [[ 可能 ]] 将成为一个语言标准,如果这不是太明显的话。
    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 2021-11-02
    • 2011-01-29
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2020-10-17
    • 2010-10-23
    相关资源
    最近更新 更多