【讨论】2.6.x 内核的 likely, unlikely
2.6.x 内核中有多处用到了这两个宏,我在头文件<include/linux/compiler.h>里查到了#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
正不知何意,不知有人知否? 对于条件选择语句,gcc内建了一条指令用于优化,在一个条件经常出现或者很少出现的时候,编译器可以根据这条指令对条件分支选择进行优化,内核把这条指令封装成了宏 这个好像和cache有关! 这个好像和cache有关!
对,主要是在条件判断结果可以预测时--比如处理错误,可以让编译器更加合理的安排机器指令的顺序,这样可以保证prefetch到cpu cache中指令,大多数情况下,正是下面紧接着要执行的。以加快速度 但是,我还想问一下。是不是,有流水线likely就有用啊!我用的uclinux中好象也有这个语句啊!这个是针对arm 的啊! 对于条件选择语句,gcc内建了一条优化指令,在一个条件经常出现likely(),或者该条件很少出现的时候unlikely(),编译器可以根据这条指令对条件分支选择进行优化。内核把这条指令封装成了宏。
页:
[1]