OC底層原理四: 編譯器優(yōu)化

OC底層原理 學習大綱

問題

  • 為什么蘋果生產(chǎn)包會自動選擇 Release環(huán)境?

1.認識slowpath 和 fastpath

objc4源碼中有很多slowpathfastpath函數(shù),他們都是為編譯優(yōu)化而生。

image.png

宏定義如下:

#define fastpath(x) (__builtin_expect(bool(x), 1))
#define slowpath(x) (__builtin_expect(bool(x), 0))

2. 認識 __builtin_expect(EXP, N)

__builtin_expect是gcc引入的

  • 作用: 允許程序員最有可能執(zhí)行的分支告訴編譯器。
  • 函數(shù)__builtin_expect(EXP, N) 表示 EXP==N的概率很大

3. slowpath 和 fastpath

  • fastpath
    定義__builtin_expect((x),1),表示 x 的值為的可能性更大;即執(zhí)行 if 里面語句的機會更大
  • slowpath
    定義的__builtin_expect((x),0),表示 x 的值為的可能性更大,即執(zhí)行 else 里面語句的機會更大

4. 如何配置

  • target ->BuildSettings: 搜索:optimization。
    我們發(fā)現(xiàn)Optimization Level中,Release環(huán)境下,已自動選擇Fastest,Smallest[-OS]。 這就是我們問題的答案。

  • 在開發(fā)過程中,想要提高編譯速度,可將Debug環(huán)境也選中Fastest,Smallest[-OS]模式。

image

Fastest,Smallest[-OS]模式下,會發(fā)現(xiàn)匯編頁面展示的代碼已精簡很多

答案

Release環(huán)境下,系統(tǒng)自動選擇Fastest,Smallest[-OS]模式,完成編譯器優(yōu)化。

下一節(jié): OC底層原理五:剖析isa (卸妝后的對象)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容