gcc and gdb -O 优化选项讲解
This commit is contained in:
parent
93cecd7544
commit
a9cc606424
@ -5,13 +5,39 @@
|
||||
- [制作库文件](#制作库文件)
|
||||
|
||||
## 编译选项
|
||||
`g++ -S test.s test.cpp` 编译成汇编文件
|
||||
`g++ -c test.o test.s` 目标文件
|
||||
`g++ -o test test.o` 链接
|
||||
- `g++ -S test.s test.cpp` 编译成汇编文件
|
||||
- `g++ -c test.o test.s` 目标文件
|
||||
- `g++ -o test test.o` 链接
|
||||
|
||||
`g++ -O1/-O2/-O3` // 优化选项
|
||||
- ***优化等级***
|
||||
- **O0** 不进行任何优化
|
||||
- **O1** 基础优化
|
||||
- 删除未使用的变量和函数
|
||||
- 简化控制流(如合并重复代码)
|
||||
- 常量折叠(如 2+3 替换为 5)
|
||||
- 简单的寄存器分配
|
||||
- **O2** 中等优化,推荐级别
|
||||
- 指令调度(提高指令级并行性)
|
||||
- 循环优化(如循环展开、循环不变代码外提)
|
||||
- 函数内联(简单函数直接展开)
|
||||
- 分支预测优化
|
||||
- 数据流分析优化
|
||||
- **O3** 激进优化
|
||||
- 更激进的循环优化(如自动向量化,利用 SIMD 指令如 SSE/AVX)
|
||||
- 函数内联更积极(可能导致代码膨胀)
|
||||
- 删除冗余内存访问
|
||||
- 数学表达式重构(可能影响浮点精度)
|
||||
- **优化易导致的问题**
|
||||
- 暴露未定义行为(Undefined Behavior, UB)
|
||||
- 调试信息不匹配
|
||||
- 重新排列或合并浮点运算,导致精度损失
|
||||
- 代码体积膨胀
|
||||
- 重排内存访问顺序,影响多线程程序或硬件寄存器操作
|
||||
- 依赖时序的代码失效
|
||||
- 向量化(SIMD)导致的兼容性问题
|
||||
- 内联汇编的意外行为
|
||||
|
||||
`g++ -S -o - -fverbose-asm xxx.cpp > xxx.s` // 输出带注释的汇编
|
||||
- `g++ -S -o - -fverbose-asm xxx.cpp > xxx.s` // 输出带注释的汇编
|
||||
|
||||
`gcc -s` 选项用于剥除可执行文件中的符号表和重定位信息,减小可执行文件的大小
|
||||
- **正常功能保持**
|
||||
|
Loading…
x
Reference in New Issue
Block a user