在linux中的likely和unlikely
在linux中的likely和unlikely
0
推荐
在linux中判断语句经常会看到likely和unlikely,例如:
if(likely(value)){
}
else{
}
简单从表面上看if(likely(value)) == if(value),if(unlikely(value)) == if(value)。
这两个宏对程序运行结果没有影响,只是用于提高程序效率。其实现和gcc编译器密切相关。
具体点说,就是如果你觉得程序运行时候一般sndcmd|=0的可能性比较大,那么就加上likely的macro;反之则加unlikely。
也就是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 i
相关文档:
总览
用iptables -ADC 来指定链的规
则
,-A添加 -D删除 -C 修改
iptables - [RI] chain rule num rule-specification[option]
用iptables - RI 通过规则的顺序指定
iptables -D chain rule num[option]
删除指定规则
iptables -[LFZ] [chain][option]
用iptables -LFZ 链名 [选项]
iptables -[NX] chain
用 -NX ......
摘 要: 嵌入式 Linux 的可移植性使得我们可以在各种电子产品上看到它的身影。对于不
同体系结构的处理器来说Linux的启动过程也有所不同。本文以S3C2410 ARM处理器为例,
详细分析了系统上电后 bootloader的执行流程及 ARM Linux的启动过程。
......
长期对着黑白的终端,可能会觉得枯燥。其实Bash允许自定义彩色的命令提示符、彩色的grep显示、彩色的man显示、彩色的ls显示等等。
我们只需要编辑个人或者全局的shell配置文件就可以构建自己的独特的多姿多彩的shell。其中,用户个人配置文件是~/.bashrc,全局配置文件是/etc/bash.bashrc(ubuntu)或者/etc/bashrc(Fedor ......
在TimesTen的优化中,如果涉及到 Replication 或者Cache Group的话,那么针对 TCP/IP相关的参数的优化对性能是有益的。因为它们俩都是通过TCP/IP协议进行数据交互的。在安装文档(install.pdf)的39页有具体的说明:
For replication, TCP send and receive buffers should be increased to a minimum of 512KB. To ......
1.研究Linux实现多媒体播放的所有技术点
1) Live555库的编译与使用(已经搞定),需要进一步弄清楚的地方
在Linux如何编译动态库和静态库
如何编译,改变编译选项和集成编译
如何调试:gcc和IDE的 : QT Creator 、
2) ffmpeg在L ......