红联Linux门户
Linux帮助

linux中likely与unlikely

发布时间:2015-09-24 10:24:41来源:linux网站作者:luvzhan

linux中 likely与unlikely,见了不少次,但终究没体验过所谓的提高效率,所以,如果不是阅读他人的讲解,自己在码砖的时候就不能想到使用它,软实力的一个体现吧。


看内核时总遇到if(likely( )){}或是if(unlikely( ))这样的语句,具体定义如下:
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)

#define likely(x) __builtin_expect(!!(x), 1)也就是说明x==1是“经常发生的”或是“很可能发生的”。


使用likely ,执行if后面语句的可能性大些,编译器将if{}是的内容编译到前面, 使用unlikely ,执行else后面语句的可能性大些,编译器将else{}里的内容编译到前面。这样有利于cpu预取,提高预取指令的正确率,因而可提高效率。


总之,likely与unlikely互换或不用都不会影响程序的正确性。但可能会影响程序的效率。

if(likely(foo))  //认为foo通常为1

if(unlikely(foo)) //认为foo通常为0

!!(x)这个操作会把 x 转化成bool值,即0或1.


Linux内核中likely与unlikely的宏定义解析:http://www.linuxdiyf.com/linux/12900.html

linux内核中的likely和unlikely宏定义:http://www.linuxdiyf.com/linux/604.html