01
编译原理概述
编译器工作流程:词法分析→语法分析→语义分析→IR→优化→目标代码。为什么学习编译原理?
基础全景
02
词法分析基础
正则表达式与有限自动机(NFA/DFA),将源代码字符串转换为流。
正则自动机
03
语法分析入门
上下文无关文法(CFG),自顶向下与自底向上解析,手写递归下降解析器。
CFG解析器
04
语义分析与符号表
作用域管理、类型检查、符号表的设计与实现。
符号表类型检查
05
中间表示(IR)设计
三地址码、静态单赋值(SSA),为什么IR是优化的基石。
SSA三地址码
06
基本块与控制流图(CFG)
划分基本块,构建CFG,以及在优化中的作用。
CFG结构
07
数据流分析基础
到达定值、活跃变量分析,迭代算法求解数据流方程。
数据流迭代
08
局部优化
常量折叠、代数化简、公共子表达式消除(CSE)。
CSE折叠
09
全局优化
全局值编号、循环不变式外提、部分冗余消除(PRE)。
PRE全局
10
循环优化
循环展开、融合、分发、向量化。
循环向量化
11
寄存器分配
图着色算法、线性扫描算法,实际中的权衡。
寄存器着色
12
指令调度与软件流水
消除流水线气泡,提高指令级并行(ILP)。
ILP流水线
13
过程间分析(IPA)
内联优化、过程间常量传播、逃逸分析。
IPA内联
14
垃圾回收与内存管理
标记-清除、复制算法、分代回收,与编译器配合。
GC分代
15
JIT编译原理
即时编译触发条件、分层编译(C1/C2)、去优化。
JIT分层
16
AOT编译与链接
静态编译、LTO、生成位置无关代码(PIC)。
AOTLTO
17
性能分析工具
perf、gprof、Valgrind、火焰图,定位性能瓶颈。
perf火焰图
18
CPU微架构对优化的影响
缓存层次、分支预测、乱序执行,编写缓存友好代码。
微架构缓存
19
内存优化
减少分配、对象池、结构体布局、避免伪共享。
内存伪共享
20
并发与并行优化
多线程、锁优化、无锁数据结构、SIMD指令集。
并发SIMD
21
GPU编程与优化
CUDA/OpenCL基础,内存层次,线程束发散优化。
GPUCUDA
22
编译器自动向量化
编写代码让编译器生成SIMD,手动intrinsic编程。
自动向量化intrinsic
23
反馈导向优化(FDO)
PGO收集运行时信息反馈给编译器。
PGOFDO
24
二进制优化与链接后重写
BOLT工具、二进制重写技术。
BOLT重写
25
语言运行时优化
解释器优化、内联缓存(IC)、多态内联缓存(PIC)。
ICPIC
26
特定领域优化
数据库查询优化、Web服务器、游戏引擎优化。
领域实战
27
编译器测试与验证
差分测试、随机测试、回归测试,确保优化正确性。
测试正确性
28
开源编译器框架
LLVM架构详解、MLIR简介、GCC插件开发。
LLVMMLIR
29
构建自己的玩具编译器
从零实现支持基本优化的迷你编译器。
动手迷你
30
性能优化方法论
Amdahl定律、瓶颈分析、性能建模,撰写优化报告。
方法论报告