printk()和printf()显著区别在于前者允许你指定一个标志来设置优先级。 printk(KERN_ERR "this is error!\n");
likely 和 unlikely是2个宏 #define likely(x) _builtin_expect(!!(x),1) #define unlikely _builtin_expect(!!(x),0)
if(likely(xxxx)){
statement;
}
if(unlikely(xxxx)){
statemen;
}
likely将statement的二进制代码紧跟在前面的程序的后面代码,这样cache在预读取数据时就可以将代码命中,提高命中,提高效率。
具体分析见 :http://blog.youkuaiyun.com/rstevens/article/details/1798561
inline 函数代价:因为内联函数会在调用处展开,这么做可以消除函数调用和返回所带来的开销(主要是寄存器的恢复和存储),但是这么做是有代价的,会使代码变得更长意味着占用更多的内存空间或者占用的更多指令缓存,如果一个函数较大,会被反复调用,且没有特别的时间限制最好不要做成内联函数。。
内核中,为了类型安全和易读性,优先使用内联函数而不是复杂的宏。
内核中没有内存保护;
不要轻易使用浮点数;
容积小且固定的栈;
同步和并发;
注意可移植性;