iOS Bitcode編譯器編譯的過程原理

//聯(lián)系人:石虎?QQ:1224614774?昵稱:嗡嘛呢叭咪哄

一、概念

?1.為了更好的理解什么是 Bitcode,我們簡短的看一下編譯器編譯的過程:

? ? * Lexer :讀入源文件,并將其轉(zhuǎn)化成字符流。

? ? * Parser :將字符流轉(zhuǎn)換成 AST(抽象語法樹)。

? ? * Semantic Analysis :對輸入的 AST 進行語法檢查。

? ? * Code Generation :代碼生成,將 AST 轉(zhuǎn)換成低層次的IR指令。

? ? * Optimization :分析 IR 指令,將其中潛在會拖慢運行速度的指令干掉。

? ? * AsmPrinter :通過 IR(中間碼)生成特定 CPU 架構(gòu)的匯編代碼。

? ? * Assemble :將匯編代碼轉(zhuǎn)化成二進制。

? ? * Linker :通常程序會引用其他的二進制文件(.a 或者 framework),但是這些鏈接在程序中沒有正確的地址,只是個占位符。Linker 的工作就是給這些占位符正確的地址。

? ? * 更多信息可以參考:The Compiler


二、真實的編譯器構(gòu)架


? 1.真實的編譯器構(gòu)架,會將上述過程分成前端和后端兩部分來處理:

? ? * 在前后端之間傳遞的就是 IR(中間碼),而 Bitcode 就是一種特殊形式的中間碼。原本前后端的工作都是在本地 LLVM 中完成,雖然 Apple 沒有給出具體的 Bitcode 實現(xiàn),但是通過他們的文檔可以猜測,是將一部分后端的工作移到了服務(wù)器進行。從 Xcode 上傳 IR 到服務(wù)器,服務(wù)器來真對不同的機型進行后續(xù)操作。從而達到真對不同機型生成對應(yīng)指令集的二進制,而減小包體積的目的。

謝謝!!!

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

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 做iOS開發(fā)的朋友們都知道,目前最新的Xcode7,新建項目默認就打開了bitcode設(shè)置.而且大部分開發(fā)者...
    火星來的農(nóng)民閱讀 2,769評論 0 4
  • 一、BitCode是什么 Bitcode is an intermediate representation of...
    Yaanco閱讀 1,079評論 0 7
  • 前言 2000年,伊利諾伊大學厄巴納-香檳分校(University of Illinois at Urbana-...
    星光社的戴銘閱讀 16,274評論 8 180
  • 是的,此行的終點,櫻桃林。全部是無公害,不施肥,不用農(nóng)藥的純綠色食品。 不限量,全免費,自助采摘,全部拿走。 上百...
    云淡風輕之藍閱讀 489評論 40 34
  • 今天體測 而我悲催的來了大姨媽 于是乎成了后援一樣 跟著大家進操場 幫拿衣服幫拿卡 幫人壓坐仰臥起 原本是想跟大家...
    sunpanda閱讀 241評論 0 1

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