__builtin_expect 是GCC的内置函数,用来对选择语句的判断条件进行优化,常用于一个判断条件经常成立(如likely)或经常不成立(如unlikely)的情况。 __builtin_expect的函数原型为long __builtin_expect (long exp, long c),返回值为完整表达式exp的值,它的作用是期望表达式exp的值等于c(注意,如果exp == c条件成...
# 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...
if (unlikely(!bvl)) { mempool_free(bio, bio_pool); bio = NULL; goto out; } 1. 2. 3. 4. 5. 6. 在这里,调用likely()或unlikely()告诉编译器这个条件很有可能或者不太有可能发生,好让编译器对这个条件判断进行正确地优化。这两个宏在include/linux/compiler.h文件中可以找到: #define likely(x...
在Linux内核中likely和unlikely函数有两种(只能两者选⼀)实现⽅式,它们的实现原理稍有不同,但作⽤是相同的,下⾯将结合linux-2.6.38.8版本的内核代码来进⾏讲解。1、对__builtin_expect的封装 它们的源代码如下:/* linux-2.6.38.8/include/linux/compiler.h */ # define likely(x) __built...
在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 */ ...