- 论坛徽章:
- 0
|
内核中有很多使用likely(),unlikely()的地方。
这两个宏的作用是优化,如果去掉这个宏也完全可以,只是性能会差点,gcc不给优化了。
比如:sk_buff.c中:
753 static inline unsigned char *skb_pull(struct sk_buff *skb, unsigned int len)
754 {
755 return unlikely(len > skb->len) ? NULL : __skb_pull(skb, len);
756 }
完全可以改成:
753 static inline unsigned char *skb_pull(struct sk_buff *skb, unsigned int len)
754 {
755 return (len > skb->len) ? NULL : __skb_pull(skb, len);
756 }
只是后者的性能会差点,因为没有了likely(), gcc就没有给优化。
在理解内核的时候,完全可以忽略likely() and unlikely().
在写内核代码的时候,如果碰到一个条件判断,这个条件判断成立的可能性大,最好使用likely(), 如果这个条件判断不成立的可能性大,最好使用unlikely()
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1938/showart_84645.html |
|