码迷,mamicode.com
首页 > 其他好文 > 详细

nn_slow和nn_fast

时间:2014-11-16 11:53:10      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   sp   div   log   代码   bs   ef   

#define nn_fast(x) __builtin_expect ((x), 1)
#define nn_slow(x) __builtin_expect ((x), 0)

__builtin_expect目的是提供分支信息给编译器,让编译器优化代码,减少指令的跳转带了的性能下降。
处理器里有很多处理单元,可以预加载很多指令进行并行运算,但是如果遇到跳转的指令没有加载到处理
单元中,所有的预加载指令都必须重新加载。

__builtin_expect ((x), 1) 这个可以告诉编译器,x为真的情况比较多
__builtin_expect ((x), 0) 这个可以告诉编译器,x为假的情况比较多

if (__builtin_expect ((x), 1)) {
   code1...
}
else {
   code2....
}
x为真的情况多,编译器编译的时候优化代码,使得执行时,预先加载code1的代码的指令

__builtin_expect ((x), 0)同理,预先加载code2的代码指令。

__builtin_expect不影响到x的值,x为真,__builtin_expect返回的值也为真
if(nn_fast(x)) == if (x)
if(nn_slow(x)) == if (x)

 

nn_slow和nn_fast

标签:style   blog   color   sp   div   log   代码   bs   ef   

原文地址:http://www.cnblogs.com/bizhu/p/4101193.html

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