在 CentOS 上优化 C++ 编译,可以从编译器选项、系统环境、构建系统、依赖与运行时几个层面来做。下面按实用程度给你一套比较完整的建议。
CentOS 自带 GCC 通常较老(如 4.8 / 7),建议升级:
# CentOS 7
yum install centos-release-scl
yum install devtoolset-11
scl enable devtoolset-11 bash
或安装 LLVM/Clang:
yum install clang
在 CMake / Makefile 中:
-O2 # 推荐默认
-O3 # 计算密集型可尝试
-march=native # 针对本机 CPU 优化
-flto # 链接时优化(LTO)
-fno-rtti # 不用 RTTI 时关闭
-fno-exceptions # 不用异常时关闭(谨慎)
示例:
g++ -O3 -march=native -flto main.cpp
⚠️ -O3 不一定比 -O2 快,需实测。
-Wall -Wextra -Werror
Clang 可用:
clang++ -O2 -fsanitize=address
yum install ninja-build cmake
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
ninja
比 Make 快很多。
make -j$(nproc)
或 Ninja 默认并行。
避免重复编译:
yum install ccache
export CC="ccache gcc"
export CXX="ccache g++"
或 CMake:
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
ulimit -n 65535
编辑 /etc/security/limits.conf
mkdir /tmp/build
mount -t tmpfs tmpfs /tmp/build
把构建目录放进去。
setenforce 0
(生产不建议)
减少链接时间。
libc++(Clang)jemalloc / tcmalloc(运行时)yum install jemalloc
perf 分析热点-fprofile-generate / -fprofile-use PGOmarch=native 明确目标 CPUset(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -flto")
set(CMAKE_CXX_COMPILER_LAUNCHER ccache)
如果你愿意,可以告诉我:
我可以给你更针对性的编译参数和配置示例。