文档目录

编译优化标志详解

目标:知道每种优化级别具体做了什么,才能为项目选择正确的编译配置。

  • 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:隐藏非导出符号,减少动态库符号表开销。