__builtin_expect 是GCC的内置函数,用来对选择语句的判断条件进行优化,常用于一个判断条件经常成立(如likely)或经常不成立(如unlikely)的情况。 __builtin_expect的函数原型为long __builtin_expect (long exp, long c),返回值为完整表达式exp的值,它的作用是期望表达式exp的值等于c(注意,如果exp == c条件成...
在Linux内核中likely和unlikely函数有两种(只能两者选⼀)实现⽅式,它们的实现原理稍有不同,但作⽤是相同的,下⾯将结合linux-2.6.38.8版本的内核代码来进⾏讲解。1、对__builtin_expect的封装 它们的源代码如下:/* linux-2.6.38.8/include/linux/compiler.h */ # define likely(x) __built...
# define unlikely(x) __builtin_expect(!!(x), 0) __builtin_expect 是GCC的内置函数,用来对选择语句的判断条件进行优化,常用于一个判断条件经常成立(如likely)或经常不成立(如unlikely)的情况。 __builtin_expect的函数原型为long __builtin_expect (long exp, long c),返回值为完整表达式exp的值,它的...
if(likely(foo)) //认为foo通常为1 if(unlikely(foo)) //认为foo通常为0 疑惑: 为什么likely或是unlikely要定义成__builtin_expect(!!(x), 1),而不直接用__builtin_expect(x, 1)?" !!(x) "与" x "有什么不同? 另外内核2.6.31.5中likely和unlikely还有一种定义: # ifndef likely # define likel...
本文讲的likely()和unlikely()两个宏,在linux内核代码和一些应用中可常见到它们的身影。实质上,这两个宏是关于GCC编译器内置宏__builtin_expect的使用。 顾名思义,likely()指“很有可能”之意,而unlikely()指“不太可能”之意。那么,在实际应用中,它们代表什么?又是怎么使用的呢?下面是一篇外文翻译(加上了...
在Linux内核中likely和unlikely函数有两种(只能两者选一)实现方式,它们的实现原理稍有不同,但作用是相同的,下面将结合linux-2.6.38.8版本的内核代码来进行讲解。 1、对__builtin_expect的封装 它们的源代码如下: /* linux-2.6.38.8/include/linux/compiler.h */ ...
在Linux内核中likely和unlikely函数有两种(只能两者选一)实现方式,它们的实现原理稍有不同,但作用是相同的,下面将结合linux-2.6.38.8版本的内核代码来进行讲解。 1、对__builtin_expect的封装 它们的源代码如下: /* linux-2.6.38.8/include/linux/compiler.h */ ...
参考文档:http://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/Other-Builtins.html#Other-Builtins在Linux内核中likely和unlikely函数有两种(只能两者选一)实现方式,它们的实现原理稍有不同,但作用是相同的,下面将结合linux-2.6.38.8版本的内核代码来进行讲解。
在Linux内核中likely和unlikely函数有两种(只能两者选一)实现方式,它们的实现原理稍有不同,但作用是相同的,下面将结合linux-2.6.38.8版本的内核代码来进行讲解。 1、对__builtin_expect的封装 它们的源代码如下: /* linux-2.6.38.8/include/linux/compiler.h */ ...