在 CentOS 上优化 C++ 编译与运行配置,可以从 编译器、系统环境、编译参数、运行时性能 等多个层面入手。下面按常见场景系统说明。
g++ --version
yum install -y centos-release-scl
yum install -y devtoolset-11
scl enable devtoolset-11 bash
或加入永久生效:
echo "source /opt/rh/devtoolset-11/enable" >> ~/.bashrc
✅ 推荐版本:
-O3、-march=native、std::atomic 优化g++ -O3 -march=native -flto -DNDEBUG -std=c++17 main.cpp
| 参数 | 说明 |
|---|---|
-O3 |
最高级别优化 |
-march=native |
使用当前 CPU 全部指令集 |
-flto |
链接时优化 |
-DNDEBUG |
关闭 assert |
-std=c++17 |
使用现代 C++ |
#ifdef NDEBUG
#pragma GCC optimize("O3")
#endif
lscpu
确保:
-march=native-march=skylake
-march=znver3
yum install -y cpupowerutils
cpupower frequency-set -g performance
gold 或 lld 链接器g++ -fuse-ld=gold main.cpp
或:
yum install lld
g++ -fuse-ld=lld main.cpp
✅ 好处:
-Wl,--strip-all
yum install -y jemalloc
g++ main.cpp -ljemalloc
✅ 对频繁 new/delete 程序提升明显
yum install -y numactl
运行:
numactl --cpunodebind=0 --membind=0 ./app
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -flto -DNDEBUG")
set(CMAKE_EXE_LINKER_FLAGS "-fuse-ld=gold")
yum install -y perf
perf stat ./app
perf top
g++ -pg main.cpp
./a.out
gprof a.out gmon.out
❌ 不要:
-O3-march=native-funroll-loops✅ 推荐:
-O3 + LTO-O0 -gg++ -O3 -march=native -flto -DNDEBUG -std=c++17 -fuse-ld=gold main.cpp -ljemalloc
如果你愿意,可以告诉我:
我可以给你 一套完全定制的编译配置方案。