在 CentOS 上使用 GCC 进行编译优化,可以从编译选项、架构适配、链接优化、运行时调优、代码层面几个维度来做。下面按实用程度整理一份“技巧清单”。
-O2 # 推荐默认
-O3 # 对计算密集型程序可尝试
-Os # 追求体积最小(嵌入式/容器)
CentOS 默认 gcc 多为
-O0,不优化时性能很差。
-march=native
-mtune=native
或明确指定:
-march=skylake
-mtune=skylake
查看本机架构:
gcc -march=native -Q --help=target
-flto
配合:
gcc -O2 -flto main.c func.c -o app
✅ 对大型 C/C++ 项目效果明显
-ftree-vectorize # 通常 -O3 已开启
-mavx2 -mfma
检查是否向量化:
-fopt-info-vec
-floop-optimize
-fbranch-probabilities # 配合 -fprofile-generate
# 1. 生成 profile
gcc -O2 -fprofile-generate app.c -o app
# 2. 运行典型负载
./app < input > /dev/null
# 3. 重新编译
gcc -O2 -fprofile-use app.c -o app
✅ 性能提升常见 10%~30%
-fuse-ld=gold
# 或
-fuse-ld=lld
-s
-Wl,--strip-all
-fno-rtti
-fno-exceptions # 不需要异常时
-fvisibility=hidden
perf / flamegraph 分析热点taskset 绑核nice -n -20CentOS 7 默认 gcc 是 4.8.5,非常老:
yum install centos-release-scl
yum install devtoolset-9-gcc devtoolset-9-gcc-c++
scl enable devtoolset-9 bash
CentOS 8 / Stream:
dnf install gcc-toolset-11
gcc -O2 -march=native -mtune=native -flto -Wall
gcc -O3 -march=native -mtune=native -flto -mavx2 -fopenmp
gcc -Os -s -flto
如果你愿意,可以告诉我:
我可以直接给你一套最优编译参数。