Compiler Optimization
The article details Baidu APP’s comprehensive compiler‑optimization strategy, including GCC‑Oz size reduction, Swift‑Osize with whole‑module optimization, link‑time optimization, symbol stripping, dead‑code removal, asset catalog compression, minimizing C++ virtual functions, slimming third‑party SDKs, dropping unused ARM architectures, Xcode 14 binary‑size tweaks, and eliminating built‑in Swift libraries by raising the minimum iOS version.
本文重点介绍编译器优化,在百度APP实践中,编译器优化包括GCC语言编译优化、Swift编译优化、LTO优化、剥离调试符号、剥离符号表、剔除未引用的代码、Asset 优化、C++虚函数优化和三方SDK编译器方向瘦身。此外,我们重点介绍了指令集架构优化、XCode升级优化和Swift内置动态库优化,这三个模块优化的基础原理都涉及到编译器,所以我们在此篇章一起介绍。
1. GCC语言编译优化:采用-Oz优化方式,通过识别编译单元中的跨函数相同代码序列来减少代码大小,产生体积更小的二进制产物,对OC、C、C++都有效果。
2. Swift编译优化:采用Optimize for Size[-Osize]和Whole Module 同时开启,优化效果体现在减少10%的swift包体积大小。
3. LTO优化:Link Time Optimization,在链接阶段进行跨模块间的优化,包括函数内联化、去除无用代码、全局优化作用。
4. 剥离调试符号和剥离符号表:通过Strip Linked Product和Strip Debug Symbols During Copy,去除不需要的符号信息,减少包体积。
5. 剔除未引用的代码:通过Dead Code Stripping,在链接时将C、C++、Swift等静态语言无用代码从安装包剔除。
6. Asset优化:通过Asset Catalog Compiler的Optimization选项,选择Space可以一定程度优化包大小。
7. C++减少虚函数的使用:减少虚函数的使用可以减少虚函数表所占用的空间,从而减小程序包的大小。
8. 三方SDK编译器方向瘦身:推动第三方SDK业务方对其编译器进行优化以实现应用瘦身。
9. 指令集架构优化:iPhone设备支持armv6, armv7, armv7s, arm64四种指令集架构,优化包体积可以通过去除无用架构(如armv6, armv7s)实现。
10. XCode升级优化:XCode 14优化包体积包括Message send函数调用占用从12 bytes降低到8 bytes,Retain和release函数调用占用从8 bytes降低到4 bytes,autorelease优化移除自动释放省略中的mov指令,体积降低4 bytes。
11. Swift内置动态库优化:通过将APP支持的最低版本修改为12.2,去除内置的Swift系统库,减少包体积。
Baidu Geek Talk
Follow us to discover more Baidu tech insights.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.