您现在的位置是:首页 >技术教程 >C++编译期优化 ---分支预计__builtin_expect网站首页技术教程
C++编译期优化 ---分支预计__builtin_expect
简介C++编译期优化 ---分支预计__builtin_expect
在编写程序逻辑的时候,使用了大量的if-else 分支,为了程序尽可能的高效运行,会考虑把可能性更高的条件写在前面,这样程序的平均运行时间会更短。
gcc提供了一种方式,可以让编译器自行优化
__builtin_expect(expr,bool)
当bool为真时即__builtin_expect(expr,true),这是告诉编译器expr为真的可能性更大,编译后这个分支会在前面。
当bool为假时即__builtin_expect(expr,false),这是告诉编译器expr为真的可能性很小,编译后这个分支会在后面。
应用例子
/**
* __builtin_expect macros
*/
#if !defined(__GNUC__)
# define __builtin_expect(x, y) (x)
#endif
#ifndef likely
# 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
#endif
int main()
{
int i = 1;
if (unlikely(i==0))
{
// ...
}
else
{
// ...
}
return 0;
}
上面代码中!!(x)这是c/c++中表达式转成bool类型的一种技巧,
if (unlikely(i==0))这一分支在编译成汇编时会放在后面,会优先判断i!=0的情况。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。





U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结