Swift生命周期
2022-12-25 本文已影响0人
吕建雄
Objective-C通过clang编译器,编译成IR,然后再生成可执行文件.o
Swift通过Swift编译器,编译成IR,然后再生成可执行文件.o
Swift从代码生成可执行文件的过程:
1、语法分析
swiftc main.swift -dump-parse
2、分析并检查类型输出AST
swiftc main.swift -dump-ast
3、生成中间体语言(SIL),未优化
swiftc main.swift -emit-silgen
4、生成中间体语言(SIL),优化后的
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、编译生成可执行.out文件
swiftc -o main.o main.swift
@main 入口函数
通过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个字节),RefCount(占用16字节) 所以实例对象默认大小为16字节