From a9cc6064242fb444ef02e091cc9f299b0f81208d Mon Sep 17 00:00:00 2001 From: rangersly <2281598291@qq.com> Date: Sun, 13 Apr 2025 13:12:11 +0800 Subject: [PATCH] =?UTF-8?q?gcc=20and=20gdb=20-O=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=80=89=E9=A1=B9=E8=AE=B2=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- program/tool/gcc_g++.md | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/program/tool/gcc_g++.md b/program/tool/gcc_g++.md index 52a5567..383111b 100644 --- a/program/tool/gcc_g++.md +++ b/program/tool/gcc_g++.md @@ -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` 选项用于剥除可执行文件中的符号表和重定位信息,减小可执行文件的大小 - **正常功能保持**