linux kernel development 学习第一天之inline 和likely

来源:互联网 发布:php招聘系统 编辑:程序博客网 时间:2024/05/22 03:45

1、解压 bz2  tar jxvf

  解压  gz   tar zxvf

2、关于内联函数inline 关键字  http://blog.chinaunix.net/uid-9620812-id-1643070.html

   在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。由于在编译时将内联函数体中的代码替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间开销上不象函数调用时那么大,可见它是以目标代码的增加为代价来换取时间的节省。
   使用内联函数时应注意以下几个问题:
(1) 在一个文件中定义的内联函数不能在另一个文件中使用。它们通常放在头文件中共享。
(2) 内联函数应该简洁,只有几个语句,如果语句较多,不适合于定义为内联函数。 
(3) 内联函数体中,不能有循环语句、if语句或switch语句,否则,函数定义时即使有inline关键字,编译器也会把该函数作为非内联函数处理。
(4) 内联函数要在函数被调用之前声明。

3、关于likely  和unlikely     http://blog.csdn.net/tommy_wxie/article/details/7384641

  对于short int 型数据 输出格式是%hd

 在Linux内核中likely和unlikely函数有两种(只能两者选一)实现方式,它们的实现原理稍有不同,但作用是相同的.

#define likely(x) __builtin_expect(!!(x), 1)也就是说明x==1是“经常发生的”或是“很可能发生的”。
使用likely ,执行if后面语句的可能性大些,编译器将if{}是的内容编译到前面, 使用unlikely ,执行else后面语句的可能性大些,编译器将else{}里的内容编译到前面。这样有利于cpu预取,提高预取指令的正确率,因而可提高效率。

  注意:并不改变原来表达式的值  只是对判断条件进行优化了而已。其输出还是原来表达式的值。



0 0
原创粉丝点击