Swift生命周期

Objective-C通過clang編譯器,編譯成IR,然后再生成可執(zhí)行文件.o

Swift通過Swift編譯器,編譯成IR,然后再生成可執(zhí)行文件.o

Swift從代碼生成可執(zhí)行文件的過程:

1、語法分析

swiftc main.swift -dump-parse

2、分析并檢查類型輸出AST

swiftc main.swift -dump-ast

3、生成中間體語言(SIL),未優(yōu)化

swiftc main.swift -emit-silgen

4、生成中間體語言(SIL),優(yōu)化后的

swiftc main.swift -emit-sil

5、生成LLVM中間體語言(.ll文件)

swiftc main.swift -emit-ir

6、生成LLVM中間語言(.bc文件)

swiftc main.swift -emit-bc

7、生成匯編

swiftc main.swift -emit-assembly

8、編譯生成可執(zhí)行.out文件

swiftc -o main.o main.swift

Swift SIL

@main 入口函數(shù)

通過SIL文件結合swift-source,

打開swift-source中的HeapObject.cpp?

可知Swift對象分配的過程:

__allocating_init ---> swift_allocObject ---> _swift_allocObject_ ---> swift_slowAlloc ---> malloc

通過源碼swift-source可知Swift對象的內存結構HeapObject(OC為:objc_object)有兩個屬性: MetaData(占8個字節(jié)),RefCount(占用16字節(jié)) 所以實例對象默認大小為16字節(jié)

詳細分析請看?從_swift_allocObject_開始分析Swift對象

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容