文档目录
编译优化标志详解
目标:知道每种优化级别具体做了什么,才能为项目选择正确的编译配置。
-
5.1
-O0与-Og-O0:不优化,生成最直接的汇编,适合调试。-Og:不干扰调试的轻度优化,适合开发期。
-
5.2
-O1/-O2/-O3-O1:基础优化(分支折叠、函数内联局部、死代码消除)。-O2:标准优化(循环展开、公共子表达式消除 CSE、指令调度),生产环境默认。-O3:激进优化(向量化、函数内联全局、更多循环变换)。
-
5.3
-Os/-Oz/-Ofast-Os:优化大小(牺牲速度换取体积),嵌入式场景常用。-Oz:更激进地优化大小(Clang)。-Ofast:-O3+ 忽略严格浮点标准(-ffast-math),高速计算场景。
-
5.4 常用编译标志
-march=native与-mtune=native:让编译器针对当前 CPU 生成指令。-flto:链接时优化,跨目标文件的全局优化。-fvisibility=hidden:隐藏非导出符号,减少动态库符号表开销。