码迷,mamicode.com
首页 > 系统相关 > 详细

linux-kernel之likely和unlikely

时间:2014-09-29 17:40:51      阅读:321      评论:0      收藏:0      [点我收藏+]

标签:源代码   编译器   likely   linux   

在阅读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的话,那么这件事情可能就不会发生,我们就应该把它放在后面,通过这样的机制,等于是让上层将意识里更加容易发生的事情告诉系统从而提高了整体的运行速度,从整个系统来讲会有一定的优化


linux-kernel之likely和unlikely

标签:源代码   编译器   likely   linux   

原文地址:http://hereandthere.blog.51cto.com/7561107/1559322

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!