在 Ubuntu 上使用 GCC 进行编译优化,通常从编译选项、链接选项、系统工具链、代码层面几个方向入手。下面按实用程度给你一个系统总结。
gcc -O2 main.c -o main
常见等级:
-O0:不优化(调试用)-O1:基本优化-O2:推荐,性能与体积平衡-O3:更激进(可能变大、不一定更快)-Os:优化体积(嵌入式常用)-Og:调试 + 轻量优化✅ 生产环境推荐 -O2 或 -O3
gcc -O2 -march=native -mtune=native main.c -o main
-march=native:使用本机 CPU 指令集(AVX / SSE 等)-mtune=native:针对本机微架构调优⚠️ 注意:
这样编译的二进制不能在其他 CPU 上保证运行
gcc -O2 -flto -ffast-math -funroll-loops main.c -o main
常用选项说明:
-flto:链接时优化(LTO),效果明显-ffast-math:浮点加速(不保证严格 IEEE)-funroll-loops:循环展开-fomit-frame-pointer:减少栈帧(调试困难)gcc -O2 -flto -c a.c
gcc -O2 -flto -c b.c
gcc -O2 -flto a.o b.o -o app
或者一步:
gcc -O2 -flto main.c -o main
✅ LTO 能跨文件优化,效果显著
gcc -O2 -s main.c -o main
或:
strip main
Ubuntu 自带 GCC 可能偏旧:
sudo apt install gcc-12 g++-12
使用:
gcc-12 -O2 main.c -o main
sudo apt install clang
clang -O2 -march=native main.c -o main
make -j$(nproc)
gcc -O2 -fprofile-generate main.c -o main
./main # 运行典型负载
gcc -O2 -fprofile-use main.c -o main
✅ 对服务器程序效果非常好
malloc/free-Wall -Wextra 发现隐患inlinerestrictgcc-12 -O3 -march=native -mtune=native \
-flto -ffast-math -funroll-loops \
-s main.c -o main
如果你愿意,可以告诉我:
我可以直接给你一套最合适的编译参数。