__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用法相关推荐

  1. GCC __builtin_expect与kernel指令序列优化

    例题描述 例题描述:通过C语言识别一个int型数据在十进制下是否为回文数字.不能有额外的字符串空间开销. 如:2156512是回文数,而21565不是回文数. 问题分析: 1. 当这个数字是负数的时候 ...

  2. __builtin_expect详解

    在GTK+2.0源码中有很多这样的宏:G_LIKELY和G_UNLIKELY.比如下面这段代码: if (G_LIKELY (acat == 1)) /* allocate through magaz ...

  3. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  4. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  5. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  6. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  7. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

  8. tf.nn.embedding_lookup()的用法

    函数: tf.nn.embedding_lookup( params, ids, partition_strategy='mod', name=None, validate_indices=True, ...

  9. OpenMP用法大全

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

最新文章

  1. Android Scroller 使用详解
  2. json格式的字符串转为json对象遇到特殊字符问题解决
  3. CDN服务品质协议1
  4. 三十一、Java多线程编程(下篇)
  5. VTK:插值相机用法实战
  6. c++ primer 第14章 习题解答
  7. SonarQube6.7规则的启用和禁用
  8. linux中timer的作用,linux - linux / timer.h setup_timer()到期功能不起作用? - 堆栈内存溢出...
  9. c语言学习-计算200-300之间的偶数和并将和打印输出
  10. Node.js+Express商业开发中的安全性考虑
  11. 传世经典书丛-UNIX编程艺术
  12. BZOJ 3675 APIO2014 序列切割 斜率优化DP
  13. 《JAVA并发编程实战》,分享PDF高清版
  14. •SVG g、defs、symbol和use元素详解
  15. AIX上通过FTP下载压缩包损坏
  16. 不仅会编程还要会英语(博主英语小笔记)1.1名词
  17. 安卓系统管理软件_有了它我卸载了很多软件!
  18. IT项目管理那些事儿读书笔记
  19. 客户端连接服务器,配置出错“连接超时”或者“无监听程序”解决方法
  20. win10升级更新2004版卡在49%解决办法

热门文章

  1. matlab如何去除上边和右边的刻度线?
  2. vue笔记一:Vue技术栈
  3. group lasso matlab,一种利用肠道微生物菌群评价生猪个体蛋白营养状态的方法与流程...
  4. day4-循环练习+list
  5. 韩国政府:3月前20天对中国出口额降17.2%
  6. IOS OC IPA内购流程
  7. 一天完成把PC网站改为自适应!原来这么简单!
  8. 多目标水母搜索算法MOJS求解多无人机协同路径规划(提供MATLAB代码)
  9. PTA7-13统计工龄
  10. 键鼠大师识别图片鼠标连点模拟点击和键盘