下面从编译选项、运行环境、系统参数、代码层面、工具链几个维度,系统讲一下 Linux 下 C++ 性能调优 的常见做法,偏实战。
-O2 # 常用,稳定且高效
-O3 # 更激进,可能增大体积,有时反而变慢
-Os # 体积优先
-Ofast # 忽略严格标准(如浮点),极限性能
一般服务端:
-O2 -DNDEBUG
-march=native # 当前 CPU 最优
-mtune=native
示例:
g++ -O2 -march=native main.cpp
-flto # Link Time Optimization
-fno-math-errno
# 查看 CPU 拓扑
lscpu
绑定 CPU(减少上下文切换):
taskset -c 0,1 ./app
cpupower frequency-set -g performance
# 开启透明大页
echo always > /sys/kernel/mm/transparent_hugepage/enabled
或显式大页(高性能服务):
hugetlbfs + MAP_HUGETLB
# 文件描述符
ulimit -n 1000000
# TCP 优化
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_tw_reuse=1
unsigned n = std::thread::hardware_concurrency();
alignas(64) int counter;
malloc 不一定最快jemalloctcmallocLD_PRELOAD=/usr/lib/libtcmalloc.so ./app
void f(const std::string& s); // ✅
void f(std::string s); // ❌
vector > listunordered_map 注意 rehashmap 大量小数据atomicif (likely(cond)) {}
if (unlikely(cond)) {}
perf top
perf record -g ./app
perf report
perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > out.svg
valgrind --tool=massif ./app
heaptrack
clang-tidy
cppcheck
perf 找热点g++ -O2 -march=native -flto \
-pthread main.cpp -o app
taskset -c 0-7 \
LD_PRELOAD=/usr/lib/libjemalloc.so \
./app
如果你愿意,可以告诉我:
我可以直接给你针对性的调优方案或示例代码。