易截截图软件、单文件、免安装、纯绿色、仅160KB

关于Linux Kernel中的宏定义likely和unlikely

转自http://blog.163.com/ericxia_gnikam/blog/static/969208792008102545614453/
 
在Linux kernel的源代码中,经常能见到if(likely(x))或if(unlikely(x))之类的用法,其确切含义需要说明一下,以便更好的理解kernel的源代码。
likely与unlikely这两个宏在linux/compiler.h中的定义如下:
#define likely(x)   __builtin_expect(!!(x),1)
#define unlikely(x)   __builtin_expect(!!(x),0)
很明显,需要先弄清楚这个__builtin_expect()函数的意义。
__builtin_expect()是gcc的一个内建函数,其原型如下:
long __builtin_expect (long exp, long c);
记住该函数由GCC本身提供,用于优化代码。只中参数exp为任一表达式,c必须为常量值,其意义是在exp==c时,该函数返回非0值,意即希望exp==c。
回到likely和unlikely,likely实际是希望表达式x==1,即表达式x成立,并且在代码实际执行中,表达式x在绝大多数情况下是成立的,相反,unlikely是希望表达式在绝大多数情况下不成立,
如果有下列代码:
if(unlikely(a > b) {
    foo();
}
这段代码的意思是,在绝大多数情况下a > b这个表达式是不成立的,不成立时执行函数foo().
另外有一点要注意的是,由于likely定义时用的常量是1,unlikely用的常量是0,这正好符合c/c++语言中bool变量的实际值,而_builtin_expect()函数对exp与c进行严格相等的比较的,
因此使用likely和unlikely时,其参数应该只使用逻辑表达式,因为逻辑表达式的值只有0或1。除非真要判断某个变量的值是1或0时,才会将其它类型的参数传给likely或unlikely。这一点可能很多人会不小心用错。
使用这两个宏定义的好处是优化条件判断


相关文档:

Linux操作系统下的多线程编程详细解析(3)


3、线程标识
    函数原型:
   
#include <pthread.h>
pthread_t pthread_self(void);
pid_t getpid(void);
    getpid()用来取得目前进程的进程识别码,函数说明
    例程8
    程序目的:实现在新建立的线程中打印该线程的id和进 ......

Linux操作系统下的多线程编程详细解析(4)


   函数原型:
   
#include <pthread.h>
void pthread_cleanup_push(void (*rtn)(void *),void *arg);
    函数rtn是清理函数,arg是调用参数
void pthread_cleanup_pop(int execute);
 
 
    在前面讲过线程的终止方式,是正常终止还是非 ......

linux札记

 :::::::Linux 下的一些常用命令
# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量
资源 ......

Linux系统网络配置详解

       1、查看IP  Ifconfig
  2、配置IP的方法:
  A、 这种方法立即生效 但是重启将不会保存。(除了这个方法的其它方法都可以保存下来)
  Ifconfig eth0 1.1.1.1 netmask 255.0.0.0 up
  Ifconfig eth0:1 1.1.1.3 up  设置一个网卡多个IP的方法(在设置虚拟主机时有 ......

java鼠标拖放文件(Windows &amp; Linux适用)

/*通过鼠标拖放文件到制定控件中,并判断是否为文件,如果是,则调用文件发送方法ChatFrame.SendFile(finalpath);
*/
class TextDropTargetListener implements DropTargetListener
{
CODER Coder = new CODER();
CHAT_FRAME ChatFrame;
/**
Constructs a listener.
@param aTextArea the ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号