LLVM 淺見

LLVM

做iOS的沒有不知道的不嗶嗶了

代碼寫完首先會經過編譯器來進行編譯
首先

  1. Frontend 就是編譯器先會通過 詞法分析 語法分析 語義分析 生成中間代碼(語言不同而選擇不同的編譯器)Clang 是基於LLVM 支持C、C++ 、OC的編譯器前端部分
  2. Optimizer 進行優化 比如查找更快 體積更小 (不論什麼語言什麼平臺 都一樣 LLVM IR 有點像政府 不論你什麼民族都歸它管)
  3. Backend 根據平臺生成對應的機器碼(會根據不同平臺而不同)

那直入主題 OC的編譯過程
clang -ccc-print-phases main.m
在這裏插入圖片描述

  1. 找到文件
  2. 宏定義 import都給換掉
  3. 編譯成中間代碼
  4. 交給LLVM 後端生成機器碼
  5. 目標代碼
  6. 鏈接動態庫
  7. 編譯成適合架構的代碼

看看預編譯的過程
在這裏插入圖片描述
clang -E main.m 編譯結果 宏已經被替換了
在這裏插入圖片描述

詞法分析

clange -fmodules -E -Xclang -dump-tokens main.m
代碼全部拆解分成一個一個的(哪一行的哪一個字符都有標記)
在這裏插入圖片描述

語法分析

clang -fmodules -fsyntax-only -Xclang -ast-dump main.m
生成語法樹
在這裏插入圖片描述
中間代碼長什麼樣
生成 .ll文件 clang -S -emit-llvm main.m
在這裏插入圖片描述
全局 @開頭 比如函數名
局部 %開頭 比如變量
alloc 棧空間分配內存
i32 32bit 4個字節的意思
align 內存對齊
store 寫入數據
load 讀取數據

生成 .bc文件 clang -c -emit-llvm main.m 二進制文件 看不懂

腦瓜疼歇了改日再繼續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章