您的位置:首页 > 其它

if-else 分支预测

2017-07-04 08:36 211 查看
关于if-else分支预测Branch_predictor的分析

[cpp] view plain copy print?#ifdef __GNUC__
#define LIKELY(x) (__builtin_expect(!!(x), 1))
#define UNLIKELY(x) (__builtin_expect(!!(x), 0))
#else
#define LIKELY(x) (x)
#define UNLIKELY(x) (x)
#endif
#ifdef __GNUC__


#define LIKELY(x) (__builtin_expect(!!(x), 1))

#define UNLIKELY(x) (__builtin_expect(!!(x), 0))

#else

#define LIKELY(x) (x)

#define UNLIKELY(x) (x)

#endif

有时候,我们在看linux的源码时,会看到如下类似的代码:

[cpp] view plain copy print?if (UNLIKELY(fd < 0)) { /* Do something */ } else { /* Do other something */ }
if (UNLIKELY(fd < 0))
{
/* Do something */
}
else
{
/* Do other something */
}


[cpp] view plain copy print?if (LIKELY(!err)) { /* Do something */ } else { /* Do other something */ }
if (LIKELY(!err))
{
/* Do something */
}
else
{
/* Do other something */
}


LIKELY 作用是告诉编译器 x表达式更有可能是真的,也就是有很大的几率是运行if分支的。

UNLIKELY 作用是告诉编译器 x表达式更有可能是假的,也就是有很大的几率是运行else分支的。

这样的好处是如果if-else分支预测正确时,可以大大提高程序运行的效率。

参考网址:https://stackoverflow.com/questions/109710/likely-unlikely-macros-in-the-linux-kernel-how-do-they-work-whats-their
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: