提升 Linux 下 C++ 程序性能,通常可以从编译优化、系统调优、代码层面、工具分析四个维度入手。下面给你一个比较系统、可落地的总结。
-O2 # 常用、安全
-O3 # 更激进(注意数值稳定性和二进制体积)
-Ofast # 忽略标准合规(谨慎使用)
-march=native
示例:
g++ -O3 -march=native -flto main.cpp -o app
-flto
跨文件整体优化,通常能提升 5%~15%。
-fprofile-generate
# 运行真实负载
-fprofile-use
避免线程在 CPU 间漂移:
#include <sched.h>
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(2, &mask);
sched_setaffinity(0, sizeof(mask), &mask);
sudo cpupower frequency-set -g performance
实时线程:
struct sched_param param;
param.sched_priority = 50;
sched_setscheduler(0, SCHED_FIFO, ¶m);
对大内存、随机访问场景有效:
echo 1024 > /proc/sys/vm/nr_hugepages
配合:
mmap(..., MAP_HUGETLB)
std::vector::reservenew/delete 频繁调用std::string_view 代替 string 拷贝alignas(64) int counter;
std::thread / std::asyncunordered_map vs mapstd::endl(用 \n)emplace_back 代替 push_backepoll 而非 selectsendfile / io_uring(高并发 IO)perf record ./app
perf report
perf script | ./stackcollapse-perf.pl | ./flamegraph.pl > out.svg
valgrind --tool=massifheaptrackasan(AddressSanitizer)perf lock
或 thread sanitizer:
-fsanitize=thread
<immintrin.h>-mavx2numactl --cpubind=0 --membind=0 ./app
如果你愿意,可以告诉我:
我可以直接给你针对性优化方案或示例代码。