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
@main 入口函數(shù)
通過SIL文件結(jié)合swift-source进鸠,
打開swift-source中的HeapObject.cpp?
可知Swift對(duì)象分配的過程:
__allocating_init ---> swift_allocObject ---> _swift_allocObject_ ---> swift_slowAlloc ---> malloc
通過源碼swift-source可知Swift對(duì)象的內(nèi)存結(jié)構(gòu)HeapObject(OC為:objc_object)有兩個(gè)屬性: MetaData(占8個(gè)字節(jié)),RefCount(占用16字節(jié)) 所以實(shí)例對(duì)象默認(rèn)大小為16字節(jié)
詳細(xì)分析請(qǐng)看?從_swift_allocObject_開始分析Swift對(duì)象