在 Ubuntu 上分析 GCC 编译程序的性能,通常分为几个层次:编译期性能(编译慢不慢)、运行期性能(程序跑得快不快)、以及 GCC 优化相关分析。下面按实用场景给你一个系统性的总结。
perf(强烈推荐)Ubuntu 自带,内核级性能分析工具。
sudo apt install linux-tools-common linux-tools-generic
基本用法:
# 编译时加调试信息
gcc -O2 -g program.c -o program
# 性能采样
sudo perf record ./program
sudo perf report
常用选项:
perf stat ./program # 看 CPU、cache、分支预测
perf top # 实时热点
适合分析:
gprof(简单但有限)需要 GCC 支持:
gcc -pg -O2 program.c -o program
./program
gprof program gmon.out > analysis.txt
特点:
valgrind(内存 + 性能)sudo apt install valgrind
valgrind --tool=callgrind ./program
kcachegrind callgrind.out.*
适合:
gcc -O2 -fopt-info -o program program.c
或只看某类:
gcc -O2 -fopt-info-vec -o program program.c # 向量化
gcc -O2 -fopt-info-inline # 内联
gcc -O2 -S program.c
objdump -d program > asm.txt
对比:
-O0 vs -O2-ftime-report分析 编译本身慢不慢:
gcc -O2 -ftime-report program.c
输出:
-O2
-O3
-march=native
-flto
示例:
gcc -O3 -march=native -flto program.c -o program
注意:
-O3 不一定比 -O2 快-flto 对大型项目明显htop / topsudo apt install htop
htop
看:
perf + 多线程perf stat -a ./program
gcc -O2 -gperf stat 看整体perf record + report 找热点-fopt-info如果你愿意,可以告诉我:
gcc --version)我可以直接给你更针对性的分析方案。