llvm是乙個構建編譯器的開源專案,其中clang是其中乙個比較典型的子專案。
llvm的核心架構思想如下圖
上圖關鍵是llvm ir,llvm ir 把這個編譯流程分為前端-中間優化-後端三個部分。
前端是把某種語言編譯為llvm ir,中間優化是llvm的固定優化管線,後端是針對llvm ir 生成各種目標框架支援的組合語言。
類似 clang -emit-llvm -c hello.c -o hello.bc 生成bc檔案
類似 llvm-dis hello.bc 生成.ll檔案
.ll檔案結構如下:語法接近c語言,比組合語言抽象,比c語言底層而繁雜。
ir的結構簡單分為module、body
其中全域性變數用@,區域性變數用%,%1指的是第乙個暫存器(抽象意義上的暫存器,不同於cpu的暫存器), alloca 是宣告, align是位元組對齊位數,store是儲存,load是載入
通過llvm原始碼還可以定製自己的編譯器和編譯流程,我們留待下篇解答。
多型的初步理解
多型 父類的引用型別變數指向了子類的物件 或者是介面的引用型別變數指向了介面實現類物件。多型的前提 必須存在繼承或者實現關係。多型要注意的細節 1.多型情況下,子父類存在同名的成員變數時,預設是訪問父類的成員變數。2.多型情況下,子父類存在同名的非靜態成員函式時,預設是訪問子類的成員函式。3.多型情...
NSURLSession的初步理解
注意 當建立的session做為強引用時,需要自己手動釋放 void dealloc get請求的建立 方法一 1.建立nsurlsession nsurlsession session nsurlsession sharedsession 2.根據會話物件來建立task 第乙個引數 請求物件 第二...
SwiftyJson 的初步理解
最初的認識 swiftyjson 的本質就是乙個 public struct json結構體 struct json 的構成 public struct json public static varnull json object in json 這個是核心的屬性 所有的操作就是 在這給個地方開始的...