__builtin_expect用法
__builtin_expect说明
GCC提供了一系列builtin函数,下面对__builtin_expect(EXP, N)函数进行说明。
__builtin_expect(EXP, N)说明 EXP == N的概率很大。
likely\unlikely
在linux中likely()和unlikely一般都是封装__builtin_expect来实现
/* 去两次!个人认为是为了更好的和0或者1进行比较 */
#define likely(exp) __builtin_expect(!!(exp), 1)
#define unlikely(exp) __builtin_expect(!!(exp), 0)
int x = 1, y;
if(unlikely(x > 0)) //x > 0 为真的概率比较低if(likely(x == 1)) //x == 1 为真的概率很高y = 1; else y = -2;
else y = -1;
那很多人回奇怪if(likely(x == 1)) 和 if(x == 1)好像是一样的效果,那likely的作用是什么?
__builtin_expect作用是将“分支转移”的信息提供给编译器,这样编译器可以对代码进行优化,以减少指令跳转带来的性能下降。如上面的代码,gcc先获取x > 0 的else分支中的代码。
__builtin_expect用法相关推荐
- GCC __builtin_expect与kernel指令序列优化
例题描述 例题描述:通过C语言识别一个int型数据在十进制下是否为回文数字.不能有额外的字符串空间开销. 如:2156512是回文数,而21565不是回文数. 问题分析: 1. 当这个数字是负数的时候 ...
- __builtin_expect详解
在GTK+2.0源码中有很多这样的宏:G_LIKELY和G_UNLIKELY.比如下面这段代码: if (G_LIKELY (acat == 1)) /* allocate through magaz ...
- c语言中external,static关键字用法
static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...
- Pandas_transform的用法
先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...
- Python中yield和yield from的用法
yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...
- pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法
squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...
- python yield 和 yield from用法总结
#例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...
- tf.nn.embedding_lookup()的用法
函数: tf.nn.embedding_lookup( params, ids, partition_strategy='mod', name=None, validate_indices=True, ...
- OpenMP用法大全
OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...
最新文章
- Android Scroller 使用详解
- json格式的字符串转为json对象遇到特殊字符问题解决
- CDN服务品质协议1
- 三十一、Java多线程编程(下篇)
- VTK:插值相机用法实战
- c++ primer 第14章 习题解答
- SonarQube6.7规则的启用和禁用
- linux中timer的作用,linux - linux / timer.h setup_timer()到期功能不起作用? - 堆栈内存溢出...
- c语言学习-计算200-300之间的偶数和并将和打印输出
- Node.js+Express商业开发中的安全性考虑
- 传世经典书丛-UNIX编程艺术
- BZOJ 3675 APIO2014 序列切割 斜率优化DP
- 《JAVA并发编程实战》,分享PDF高清版
- •SVG g、defs、symbol和use元素详解
- AIX上通过FTP下载压缩包损坏
- 不仅会编程还要会英语(博主英语小笔记)1.1名词
- 安卓系统管理软件_有了它我卸载了很多软件!
- IT项目管理那些事儿读书笔记
- 客户端连接服务器,配置出错“连接超时”或者“无监听程序”解决方法
- win10升级更新2004版卡在49%解决办法