Skip to content

编译、链接与代码优化专题(Build toolchain / optimization)

HPC/AI Infra 高频问:你懂不懂编译流程、为什么开 -O3 快、-march=native、LTO/PGO、ABI、链接、符号、内联都怎么影响性能与正确性。

问题清单

  1. gcc 编译 .cpp → 可执行中间发生什么(预处理/编译/汇编/链接)?
  2. 静态库(.a) vs 动态库(.so) 区别、链接时机、优缺点?
  3. 头文件 / 编译单元 / ODR / include guard / inline 的关系?
  4. 常见优化开关:-O2/-O3/-Os/-Ofast/-march=native 差别?fast-math 危险?
  5. 内联 inline:编译器真的会内联吗?跨 TU 内联怎么了 → LTO 解决什么?
  6. LTO / PGO 原理与收益?
  7. 符号:名字修饰 mangling、extern "C"、符号可见性、static/匿名命名空间。
  8. ABI、结构体 ABI/二进制兼容、C++ 标准库 ABI 风险?
  9. 段:.text/.data/.bss/.rodata 与虚内存(回顾 memory/layout)。
  10. 快慢:为什么开优化后 debug vs release 时序差很大;如何权衡可调式性。

子文档

文件内容
index.md本总览
compile-link.md编译流程、静态/动态库、预处理
optimization-flags.md优化级别、inline/LTO/PGO、march、fast-math
abi-symbol.mdABI、mangling、符号可见性、二进制兼容

C++ 面试八股 · VitePress 版