likely(x)与unlikely(x) __builtin_expect】的更多相关文章

http://blog.csdn.net/shuimuniao/article/details/8017971 将流水线引入cpu,可以提高cpu的效率.更简单的说,让cpu可以预先取出下一条指令,可以提供cpu的效率.如下图所示: +-------------------------------- |取指令 | 执行指令 | 输出结果 +-------------------------------- |             | 取指令     | 执行 +----------------…
今天在看内核代码中看到: #define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __builtin_expect(!!(x), 0) 对 __builtin_expect不是很理解,百度一下,得知: 在 GCC 手册中对 __builtin_expect() 的描述是这样的:       由于大部分程序员在分支预测方面做得很糟糕,所以 GCC 提供了这个内建函数来帮助程序员处理分支预测,优化程序.其第一个参数 exp 为一…
1.引言 在很多源码如Linux内核.Glib等,我们都能看到likely()和unlikely()这两个宏,通常这两个宏定义是下面这样的形式. #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) 可以看出这2个宏都是使用函数 __builtin_expect()实现的, __builtin_expect()函数是GCC的一个内建函数(build-in functi…
https://blog.csdn.net/shuimuniao/article/details/8017971 #define LIKELY(x) __builtin_expect(!!(x), 1) //x很可能为真 #define UNLIKELY(x) __builtin_expect(!!(x), 0) //x很可能为假 CurrentThread.h namespace CurrentThread { // internal extern __thread int t_cachedT…
本文讲的likely()和unlikely()两个宏,在linux内核代码和一些应用中可常见到它们的身影.实质上,这两个宏是关于GCC编译器内置宏__builtin_expect的使用. 顾名思义,likely()指“很有可能”之意,而unlikely()指“不太可能”之意.那么,在实际应用中,它们代表什么?又是怎么使用的呢?下面是一篇外文翻译(加上了本人的一些理解),给出了详细答案. likely()和unlikely() 对于linux内核代码,在条件判断语句中经常看到likely()和un…
在 GCC 手册中对 __builtin_expect() 的描述是这样的: 由于大部分程序员在分支预测方面做得很糟糕,所以 GCC 提供了这个内建函数来帮助程序员处理分支预测,优化程序.其第一个参数 exp 为一个整型表达式,这个内建函数的返回值也是这个 exp ,而 c 为一个编译期常量.这个函数的语义是:你期望 exp 表达式的值等于常量 c ,从而 GCC 为你优化程序,将符合这个条件的分支放在合适的地方.一般情况下,你也许会更喜欢使用 gcc 的一个参数 '-fprofile-arcs…
智能指针笔记 GCC的原子操作函数 将流水线引入cpu,可以提高cpu的效率.更简单的说,让cpu可以预先取出下一条指令,可以提供cpu的效率.如下图所示: 取指令 执行指令 输出结果 取指令 执行 可见,cpu流水钱可以减少cpu等待取指令的耗时,从而提高cpu的效率.如果存在跳转指令,那么预先取出的指令就无用了.cpu在执行当前指令时,从内存中取出了当前指令的下一条指令.执行完当前指令后,cpu发现不是要执行下一条指令,而是执行offset偏移处的指令.cpu只能重新从内存中取出offset…
[原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AFNetworking的网络安全策略,尤其指HTTPS(大家可以先简单了解下HTTPS).再一个就是分析下AFNetworkReachabilityManager文件,看看AFNetworking如何解决网络状态的检测. 2. AFSecurityPolicy - 网络安全策略 之前我们在AFURLS…
#define likely(x) __builtin_expect(!!(x),1)#define unlikely(x) __builtin_expect(!!(x),0) 用于优化在做分支判断的时候CPU流水线问题 likely()用于分支判断的时候很有可能执行的指令,而unlikely()则相反…
查看linux内核源码,你会发现有很多if (likely(""))...及if (unlikely(""))...语句,这些语句其实是编译器的一种优化方式,具体分析如下: likely及unlikely是一个宏定义: #define likely(x)  __builtin_expect(!!(x), 1) #define unlikely(x)  __builtin_expect(!!(x), 0) likely()的 意思是认为这个分支最有可能发生,如if (…