iOS技术

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

Swift SIL

@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字节

详细分析请看 从_swift_allocObject_开始分析Swift对象

上一篇下一篇

猜你喜欢

热点阅读