在 Debian(以及大多数 Linux 发行版)上,GCC(GNU Compiler Collection) 提供了多种优化选项,主要用于提升程序性能、减小体积或兼顾调试。下面按常用程度与用途系统梳理一下。
-O0gcc -O0 -g main.c -o main
-O1 / -Ogcc -O1 main.c -o main
-O2(⭐ 推荐)gcc -O2 main.c -o main
✅ 服务器程序、通用应用首选
-O3gcc -O3 main.c -o main
⚠️ 不适合所有程序,需测试
-Osgcc -Os main.c -o main
-Oggcc -Og -g main.c -o main
-march=nativegcc -O2 -march=native main.c -o main
常用值:
x86-64skylakeznver3(AMD)armv8-a-mtune=nativegcc -O2 -mtune=native main.c -o main
gcc -O2 -flto main.c -o main
gcc -O2 -flto -fuse-linker-plugin main.c -o main
✅ 可显著提升性能
⚠️ 编译时间变长
| 选项 | 说明 |
|---|---|
-funroll-loops |
循环展开 |
-fomit-frame-pointer |
省略帧指针(x86_64 默认) |
-finline-functions |
函数内联 |
-fno-strict-aliasing |
关闭严格别名(兼容性) |
-ffast-math |
快速数学(不严格 IEEE) |
示例:
gcc -O2 -funroll-loops -ffast-math main.c
⚠️ -ffast-math 不适合科学计算、金融系统
✅ 推荐组合:
gcc -Og -g -fno-omit-frame-pointer main.c
❌ 不推荐:
gcc -O3 -g # 优化后调试困难
CFLAGS="-O2 -g -fstack-protector-strong"
-fPIE -pie
-fstack-protector-strong
-D_FORTIFY_SOURCE=2
gcc -Og -g -fno-omit-frame-pointer
gcc -O2 -march=native -flto
gcc -Os
如果你愿意,我可以:
只要告诉我你的使用场景即可。