一. 静态库和动态库
库是一种可执行的二进制文件,是编译好的代码。
静态库:
在程序编译过程中会被链接到目标代码里面.
- 优点:
直接链接到目标程序中,不需要动态链接,提高加载效率。
- 缺点:
会使目标程序的体积增大
动态库:
程序运行时由系统动态加载到内存中,供程序调用。
- 优点
不需要拷贝到目标程序中,不会影响目标程序的体积。
同一份苦可以被多个程序使用
编译时才载入的特性,也可以让我们随时对库进行替换,而不需要重新编译代码,实现动态更新。
- 缺点:
动态载入会带来一部分性能损失:比如调用时间延长,地址重定位等。
二. 静态库和动态库体积对比
-
单独打包出来的静态库和动态库体积对比:
我们以swift
版本的Lottie
动画库做对比:
静态库:

单独打包出来的静态库是8.3M
动态库:

单独打包出来的动态库是:3.7M
-
合并到项目里面打包出来的静态库和动态库的ipa包对比:
静态库:


动态库:


从上面对比图,我们可以看出,如果是单独打包静态库和动态库,明显来说是静态库比动态库大,如果是合并到项目中,看起来静态库打包出来的ipa
包比动态库打包出来的ipa
包要小。
三. 原因分析
单独打包出来的swift
版本的Lottie
静态库之所以比动态库大,主要原因在于:
- 单独打包出来的静态库,带有符号信息(就是内存地址和函数名,文件名,行号等的映射信息)
合并到项目里面打包出来的静态库的ipa
包比动态库的ipa
包小,主要原因在于:
-
当静态库合并到可执行文件中,在链接过程中去掉了静态库的符号信息,只留下真正可执行的二进制文件。
-
静态库只是中间文件,在链接的过程中会优化静态库里面的.o文件。
也就是说静态库的ipa
包比动态库的ipa
包小的主要部分是: 静态库合并到可执行文件的链接期间,链接器对静态库等做的优化,比如无用代码裁剪,函数内联,跨过程优化等操作而减少的部分。
网友评论