Mobile Development 16 min read

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.

Baidu Geek Talk
Baidu Geek Talk
Baidu Geek Talk
Compiler Optimization

本文重点介绍编译器优化,在百度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系统库,减少包体积。

Performance TuningiOS Developmentcode optimizationSwiftCompiler OptimizationiOS App DevelopmentLTO
Baidu Geek Talk
Written by

Baidu Geek Talk

Follow us to discover more Baidu tech insights.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.