Appearance
编译、链接与代码优化专题(Build toolchain / optimization)
HPC/AI Infra 高频问:你懂不懂编译流程、为什么开 -O3 快、-march=native、LTO/PGO、ABI、链接、符号、内联都怎么影响性能与正确性。
问题清单
- gcc 编译 .cpp → 可执行中间发生什么(预处理/编译/汇编/链接)?
- 静态库(.a) vs 动态库(.so) 区别、链接时机、优缺点?
- 头文件 / 编译单元 / ODR / include guard / inline 的关系?
- 常见优化开关:-O2/-O3/-Os/-Ofast/-march=native 差别?fast-math 危险?
- 内联 inline:编译器真的会内联吗?跨 TU 内联怎么了 → LTO 解决什么?
- LTO / PGO 原理与收益?
- 符号:名字修饰 mangling、extern "C"、符号可见性、static/匿名命名空间。
- ABI、结构体 ABI/二进制兼容、C++ 标准库 ABI 风险?
- 段:.text/.data/.bss/.rodata 与虚内存(回顾 memory/layout)。
- 快慢:为什么开优化后 debug vs release 时序差很大;如何权衡可调式性。
子文档
| 文件 | 内容 |
|---|---|
index.md | 本总览 |
compile-link.md | 编译流程、静态/动态库、预处理 |
optimization-flags.md | 优化级别、inline/LTO/PGO、march、fast-math |
abi-symbol.md | ABI、mangling、符号可见性、二进制兼容 |