1. 程式人生 > >linux核心中likely和unlikely的含義

linux核心中likely和unlikely的含義

在核心程式碼中經常會看到unlikely和likely的蹤影。他們實際上是定義在 linux/compiler.h 中的兩個巨集。   #define likely(x)    __builtin_expect(!!(x), )   #define unlikely(x)  __builtin_expect(!!(x), 0)   這裡的__built_expect()函式是gcc的內建函式。   至於為什麼要在核心程式碼中使用這兩個巨集,主要的目的是為了進行程式碼的優化,提高系統執行速度。   比如 :   if (likely(a>b)) {   fun();   }   if (unlikely(a
  fun();   }   這裡就是程式設計師可以確定 a>b 在程式執行過程中出現的可能相比較大,因此使用了likely()告訴編譯器將fun()函式的二進位制程式碼緊跟在前面程式的後面,這樣就cache在預取資料時就可以將fun()函式的二進位制程式碼拿到cache中。這樣,也就增加了cache的命中率。   同樣的,unlikely()的作用就是告訴編譯器,a   我們不用對likely和unlikely感到迷惑,需要知道的就是 if(likely(a>b)) 和 if(a>b)在功能上是等價的,同樣 if(unlikely(a   比如下面的程式碼:   #include
  #define unlikely(x) __builtin_expect(!!(x), 0)   #define likely(x) __builtin_expect(!!(x), )   int main()   {   int a=,b=;   if(unlikely(a   printf("in the unlikely,is not your expecting!\n");   } else {   printf("in the unlikely, is your expecting\n");   }   if(likely(a   printf("in the likely, is your expecting\n");
  }   return 0;   }   執行結果:   in the unlikely,is not your expecting!   in the likely, is your expecting   總之,likely和unlikely的功能就是增加cache的命中率,提高系統執行速度。 <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script> 閱讀(1076) | 評論(0) | 轉發(3) | 給主人留下些什麼吧!~~ 評論熱議