linux-kernel之likely和unlikely
在阅读linux源代码的时候,我们经常会发现likely和unlikely,这两个宏语句定义在compiler.h下,
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
这里我们需要先了解__builtin_expect:# define __builtin_expect(x, expected_value) (x)
所以可以发现其实likely(x)和x是一个意思,那么为什么还要费这么一个力气去做复杂化呢?
这都是为了提高系统的速度,当likely取代直接判断的时候,gcc编译器会知道likely的分支更加可能发生,那么我们把它放在前面,这样cache命中的概率也会增高,而如果是unlikely的话,那么这件事情可能就不会发生,我们就应该把它放在后面,通过这样的机制,等于是让上层将意识里更加容易发生的事情告诉系统从而提高了整体的运行速度,从整个系统来讲会有一定的优化
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。