gpt4 book ai didi

c++ - 在 if-else if 链中使用 Likely()/Unlikely() 预处理器宏

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:48 25 4
gpt4 key购买 nike

如果我有:

#define likely(x)       __builtin_expect((x),1)
#define unlikely(x) __builtin_expect((x),0)

if (A)
return true;
else if (B)
return false;
...
else if (Z)
return true;
else
//this will never really happen!!!!
raiseError();
return false;

我能否像 else if (likely(Z)) 一样将 likely() 放在最后一个条件检查周围,以表示在编译器不影响分支预测的情况下最终语句 (else) 的可能性很小之前的检查?

基本上,如果存在带有分支预测器提示的单个条件语句,GCC 是否会尝试优化整个 if-else if block ?

最佳答案

你应该明确这一点:

if (A)
return true;
else if (B)
return true;
...
else if (Y)
return true;
else {
if (likely(Z))
return true;

raiseError();
return false;
}

现在编译器清楚地理解您的意图并且不会重新分配其他分支概率。代码的可读性也增加了。

附言我建议你重写 also likely 和 unlikely 以 Linux 内核的方式来防止静默积分转换:

#define likely(x)      __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)

关于c++ - 在 if-else if 链中使用 Likely()/Unlikely() 预处理器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39029158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com