Likely and Unlikely in linux
来源:互联网 发布:魔兽争霸3改建软件 编辑:程序博客网 时间:2024/05/06 09:53
在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后面的执行语句紧跟着前面的程序,unlikely使得else后
面的语句紧跟着前面的程序,这样就会被cache预读取,增加程序的执行速度,likely和unlikely的实现在
include/linux/compiler.h中:
9 #if __GNUC__ == 2 && __GNUC_MINOR__ < 96
10 #define __builtin_expect(x, expected_value) (x)
11 #endif
12
13 #define likely(x) __builtin_expect((x),1)
14 #define unlikely(x) __builtin_expect((x),0)
__builtin_expect是gcc的一个预处理命令,其解释如下:
long __builtin_expect (long exp, long c)
You may use __builtin_expect to provide the compiler with branch prediction
information. In general, you should prefer to use actual profile feedback for this
(‘-fprofile-arcs’), as programmers are notoriously bad at predicting how their
programs actually perform. However, there are applications in which this data is
hard to collect.
The return value is the value of exp, which should be an integral expression. The
value of c must be a compile-time constant. The semantics of the built-in are that it
is expected that exp == c. For example:
if (__builtin_expect (x, 0))
foo ();
would indicate that we do not expect to call foo, since we expect x to be zero. Since
you are limited to integral expressions for exp, you should use constructions such as
if (__builtin_expect (ptr != NULL, 1))
error ();
when testing pointer or floating-point values.
- Likely and Unlikely in linux
- linux likely and unlikely解析
- linux likely and unlikely解析
- Two Linux Kernel Macros: likely and unlikely
- likely and unlikely
- likely() and unlikely()
- likely and unlikely
- likely() and unlikely()
- likely() and unlikely()
- likely() and unlikely()
- likely() and unlikely()
- linux likely & unlikely 宏
- Linux应用程序之likely and unlikely宏定义
- linux内核likely() 与 unlikely()
- Linux的likely和unlikely
- linux中的likely和unlikely...
- linux中 likely与unlikely
- linux中的likely和unlikely
- PCB布线中各层的意义
- PHP企业级应用之常见缓存技术篇
- table和div布局优缺点
- 开启windows7共享服务的方法
- for_each详解
- Likely and Unlikely in linux
- Qt调试器未设置解决方案
- Spring国际化实现
- 离开团队,你将什么都不是(转载)
- 对于TextField的一点总结具体说的是对TextField的事件
- 替换map的key并通过反射给实体类赋值(做接口或对比字段常用到)
- strspn() 函数返回在字符串中包含的特定字符的数目。
- 使用PHP开发自己的MVC框架
- Background Job "Stopped" with SSH