01
编译优化概述
什么是编译优化 · 为什么需要编译优化 · 历史与趋势
基础概念
02
编译器工作流程
词法分析 · 语法分析 · 语义分析 · 中间代码生成 · 目标代码生成
流程核心
03
中间表示(IR)
三地址码 · 静态单赋值(SSA) · 控制流图 · 数据流图
IRSSA
04
基本块与流图
基本块划分 · 支配树 · 回边与自然循环 · 可归约流图
结构循环
05
数据流分析基础
到达定值 · 活跃变量 · 可用表达式 · 非常忙表达式
分析经典
06
常量传播与折叠
常量传播算法 · 条件常量传播 · 常量折叠 · 稀疏条件常量传播
优化常量
07
死代码消除
可达性分析 · 活跃性驱动消除 · 不可达代码消除
消除精简
08
代码移动优化
循环不变式外提 · 代码提升与下沉 · 部分冗余消除 · 懒惰代码移动
移动循环
09
循环优化基础
循环展开 · 循环融合 · 循环分布 · 循环交换
循环变换
10
循环向量化
自动向量化原理 · SIMD指令集 · 可行性分析 · 失败原因
SIMD向量化
11
内联优化
内联收益与代价 · 启发式策略 · 递归内联 · 阈值调优
内联性能
12
寄存器分配
图着色分配 · 线性扫描 · 全局与局部分配
寄存器分配
13
指令调度
基本块内调度 · 全局调度 · 软件流水线 · 模调度
调度流水线
14
窥孔优化
窥孔模式 · 冗余消除 · 强度削弱 · 代数恒等式
窥孔局部
15
尾调用优化
尾递归消除 · 尾调用转换 · 栈帧复用 · 调用开销分析
尾调用递归
16
过程间优化
过程间常量传播 · 别名分析 · 逃逸分析 · 链接时优化
IPO全局
17
自动并行化
循环级并行 · 任务级并行 · OpenMP生成 · 依赖分析
并行OpenMP
18
内存优化
缓存局部性 · 数据预取 · 内存别名消除 · 结构体拆分
内存缓存
19
编译时计算
部分求值 · 特化 · 编译时函数执行 · 元编程优化
元编程特化
20
反馈导向优化(FDO)
Profile Guided Optimization · PGO工作流 · 边权重 · 布局优化
PGO反馈
21
链接时优化(LTO)
LTO原理 · 跨模块内联 · 死全局消除 · 虚函数调用优化
LTO链接
22
二进制优化
二进制重写 · 基本块重排 · 函数排序 · 链接顺序优化
二进制后处理
23
编译时间优化
增量编译 · 预编译头 · 并行编译 · 分布式编译
编译速度工程
24
调试与优化冲突
优化对调试影响 · 可调试优化 · -Og级别 · 调试信息保留
调试-Og
25
编译器优化级别
-O0~-O3详解 · -Os/-Oz · -Ofast · 自定义组合
优化等级GCC
26
GCC优化实践
常用优化选项 · 属性与内建 · 插件开发 · 优化报告
GCC实践
27
LLVM优化实践
LLVM Pass架构 · 优化流水线 · Clang选项 · 新特性
LLVMPass
28
性能分析工具
perf · gprof · Valgrind/Cachegrind · 优化报告解读
工具perf
29
实际项目优化案例
数据库引擎 · 游戏引擎 · 嵌入式系统 · 大型C++项目
案例实战
30
未来趋势
机器学习辅助编译 · 自动调优 · 异构编译 · 量子编译初步
前沿AI