在 CentOS 上优化 C++ 编译参数,主要目标是:提升运行性能、减小二进制体积、加快编译速度、保证稳定性。下面从 编译器选择、常用优化参数、架构优化、链接优化、调试与发布分离 几个方面说明。
CentOS 默认可能是 gcc 4.8.5(较老),建议升级:
yum install centos-release-scl
yum install devtoolset-11
scl enable devtoolset-11 bash
dnf install gcc-toolset-11
✅ 推荐至少 GCC 9+(支持 -O3、-march=native、LTO 更成熟)
-O2 # 推荐(稳定 + 高性能)
-O3 # 极限性能(可能增大体积,偶尔不稳定)
示例:
g++ -O2 main.cpp -o app
-march=native # 针对当前 CPU 优化
-mtune=native
⚠️ 注意:编译机 ≠ 运行机时不要使用 -march=native
跨平台示例:
-march=x86-64-v3
-std=c++17
-Wall -Wextra
-ftree-vectorize
-funroll-loops
(通常 -O3 已包含)
-flto
示例:
g++ -O2 -flto main.cpp util.cpp -o app
✅ 可提升 5%~20% 性能
-Wl,--strip-all
yum install lld
-fuse-ld=lld
-s
或
-Wl,-s
-static
⚠️ 不推荐在服务器程序中使用(glibc 兼容问题)
-fopenmp
-ffast-math # 牺牲精度换性能
⚠️ 不适合金融、科学计算
-g -O0 -DDEBUG
-O2 -DNDEBUG -flto
g++ -O2 -march=native -std=c++17 \
-Wall -Wextra -flto \
-fuse-ld=lld -s \
main.cpp -o app
g++ -O3 -march=native -std=c++17 \
-funroll-loops -flto \
-fopenmp main.cpp -o app
time ./app
objdump -d app | less
perf stat ./app
如果你愿意,可以告诉我:
我可以给你 定制编译参数。