原文:http://blog.csdn.net/rstevens/archive/2007/09/24/1798561.aspx 内核中的 likely() 与 unlikely() 在 2.6 内核中,随处可以见到 likely() 和 unlikely() 的身影,那么为什么要用它们?它们之间有什么区别? 首先要明确: if(likely(value)) 等价于 if(value) if(unlikely(value)) 也等价于 if(value) 也就是说 likely() 和 unlikely() 从阅读和理解...
by cssjtuer - Linux文档专区 - 2009-10-23 14:00:19 阅读(860) 回复(0)
最近看代码看到unlikely(),有点迷糊,特上网查了下,贴在此,留作备忘,也希望能帮到和我一样迷糊的朋友:) ------------------------------------------------------------------ Kernel : likely/unlikely macros Submitted by Kedar Sovani on February 11, 2005 - 7:46am Applications/tools Ever wondered what the likely and unlikely macros in the linux kernel...
在linux中判断语句经常会看到likely和unlikely,例如: if(likely(value)){ } else{ } 简单从表面上看 if(likely(value)) == if(value), if(unlikely(value)) == if(value)。 也就是likely和unlikely是一样的,但是实际上执行是不同的,加likely的意识是value的值为真的可能性更大一些,那么执行if的机会大,而unlikely表示value的值为假的可能性大一些,执行else机会大一些。加上这种修饰,编译成二进制代码时likely使得if...
[color="#000066"]> 有关likely和unlikely ================================ Author: taoyuetao Email: [email=tao_yuetao@yahoo.com.cn][color="#0000ff"]tao_yuetao@yahoo.com.cn[/email] Blog: taoyuetao.cublog.cn ================================ 在 [color="#0000ff"]linux 中判断语句经常会看到likely和unlikely,例如: if(likely(value)){ } else{ } 简单从表面上看if(likely(value)) == if(value),if(unlikely(val...
ver wondered what the likely and unlikely macros in the linux kernel are ? The macros are defined as : #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) The __builtin_expect is a method that gcc (versions >= 2.96) offer for programmers to indicate branch prediction information to the compiler. The return value of __builtin_expect is the first argument...
================================ Author: taoyuetao Email: [email=tao_yuetao@yahoo.com.cn]tao_yuetao@yahoo.com.cn[/email] Blog: taoyuetao.cublog.cn ================================ 在 linux 中判断语句经常会看到likely和unlikely,例如: if(likely(value)){ } else{ } 简单从表面上看if(likely(value)) == if(value),if(unlikely(value)) == if(value)。 也就是likely和unlikely是一样的,但是实际上执行是不同...
内核中有很多使用likely(),unlikely()的地方。 这两个宏的作用是优化,如果去掉这个宏也完全可以,只是性能会差点,gcc不给优化了。 比如:sk_buff.c中: 753 static inline unsigned char *skb_pull(struct sk_buff *skb, unsigned int len) 754 { 755 return unlikely(len > skb->len) ? NULL : __skb_pull(skb, len); 756 } 完全可以改成: 753 static inline unsigned char *skb_pull(struct sk_buff *skb, unsigned i...
#define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) #define __builtin_expect(exp,c) (exp) #endif 看了好久没看明白,怎么回事。 likely,unlikely的作用是什么? 那个__builtin_expect的宏定义有什么作用? 为什么 !!(x) 这么用?后面的 1 是干什么的?
#define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) #define __builtin_expect(exp,c) (exp) #endif 看了好久没看明白,怎么回事。 likely,unlikely的作用是什么? 那个__builtin_expect的宏定义有什么作用? 为什么 !!(x) 这么用?后面的 1 是干什么的?
本帖最后由 tbag-tang 于 2010-10-23 21:09 编辑 在内核源码中经常出现以下两个宏:likely(x) 和 unlikely(x) 其定义如下: # define likely(x) __builtin_expect(!!(x), 1) # define unlikely(x) __builtin_expect(!!(x), 0) 我先解释下这里的gcc内建函数 __builtin_expect 在/usr/include/gmp-i386.h中有如下说明. /* __builtin_expect is in gcc 3.0, and not in 2.95. */ __builtin_expect(!!(x), 1) ...