__builtin_expect的作用
将流水线引入cpu,可以提高cpu的效率。更简单的说,让cpu可以预先取出下一条指令,减少cpu等待取指令的耗时,从而可以提供cpu的效率。
如果存在跳转指令,那么预先取出的指令就无用了。cpu在执行当前指令时,从内存中取出了当前指令的下一条指令。执行完当前指令后,cpu发现不是要执行下一条指令,而是执行offset偏移处的指令。cpu只能重新从内存中取出offset偏移处的指令。因此,跳转指令会降低流水线的效率,也就是降低cpu的效率。
综上,在写程序时应该尽量避免跳转语句。那么如何避免跳转语句呢?答案就是使用__builtin_expect。
这个指令是gcc引入的,作用是"允许程序员将最有可能执行的分支告诉编译器"。这个指令的写法为:__builtin_expect(EXP, N)
。意思是:EXP==N的概率很大。
一般的使用方法是将__builtin_expect指令封装为LIKELY和UNLIKELY宏。这两个宏的写法如下。
#define LIKELY(x) __builtin_expect(!!(x), 1) //x很可能为真#define UNLIKELY(x) __builtin_expect(!!(x), 0) //x很可能为假
综上而言,__builtin_expect是为了生成高效的代码
__builtin_expect的作用相关推荐
- 性能优化 - likely和unlikely函数
简介 likely与unlikely是内核中定义的两个宏,位于/include/linux/compiler.h中,具体定义如下: #define likely(x) __builtin_expect ...
- __builtin_expect作用
__builtin_expect作用 文章目录 __builtin_expect作用 引言 cyberRT中对__builtin_expect的封装 __builtin_expect作用 引言 最近在 ...
- __builtin_expect详解
在GTK+2.0源码中有很多这样的宏:G_LIKELY和G_UNLIKELY.比如下面这段代码: if (G_LIKELY (acat == 1)) /* allocate through magaz ...
- __builtin_expect提高运行效率
这个指令是gcc引入的,作用是"允许程序员将最有可能执行的分支告诉编译器".这个指令的写法为:__builtin_expect(EXP, N).意思是:EXP==N的概率很大. 给 ...
- unlikely 与 likely的作用
unlikely与likely在linux kernel中经常出现. 函数定义: # define likely(x) __builtin_expect(!!(x), 1) # define unli ...
- 分支预测优化之__builtin_expect
1.引言 在很多源码如Linux内核.Glib等,我们都能看到likely()和unlikely()这两个宏,通常这两个宏定义是下面这样的形式. #define likely(x) __builtin ...
- __builtin_expect用法
__builtin_expect说明 GCC提供了一系列builtin函数,下面对__builtin_expect(EXP, N)函数进行说明. __builtin_expect(EXP, N)说明 ...
- 《C语言杂记》编译优化之__builtin_expect
最近在研究压缩算法的时候,看到了以下代码: #define LIKELY(c) (__builtin_expect(!!(c), 1)) #define UNLIKELY(c) (__builtin_ ...
- likely(x)与unlikely(x)函数,即__builtin_expect的使用
目录 1.引言 2. 函数声明 2.1. 功能描述 2.2. 参数详解 ① exp ② c 2.3. 返回值 2.4. 使用方法 3. RATIONALE(原理) 4. likely()和unlik ...
最新文章
- 小程序客服消息推送自动回复_如何让小程序客服消息根据用户输入关键词自动回复图片?...
- snmp Oid整理与运用
- Open NI for Kinect安装测试
- 【opencv】边缘高斯模糊(canny+dilate+GaussianBlur)Python实现
- [密码学] 消息认证码构造方法
- 【Qt】QWidget类详解(函数篇)
- php 单例模式 单态模式
- Redis如何做内存优化?
- zookeeper在hadoop的应用
- php设置ip,php curl如何设置ip
- 编译ffmpeg:no match insn: lbu $r16,0($r5)
- 一三五、服务器部署Node项目、Vue spa静态项目、ssr项目
- 转录组-蛋白组-代谢组关联分析
- 活体检测-用照片来做人脸识别可行吗?
- 【学习笔记】AGC009/AGC019/AGC029/AGC035
- 文献调研神器——Connected Papers
- word文档图片画红线_在Word中巧妙绘制漂亮分割线的方法
- Python音乐跳舞毯(基于海龟画图创作的作品,来自Python创意编程100例sprites篇_Python精灵模块)
- as ssd测试软件得分少,教大家AS SSD Benchmark如何测试硬盘性能
- 古人诚不欺我-南怀瑾大师