在 Linux 下优化 C++ 程序,一般可以从编译优化、系统调优、代码层面、性能分析工具四个维度来做。下面按实战角度总结。
g++ -std=c++20
-O2 # 常用
-O3 # 更高优化(有时反而变慢)
-Os # 体积优先
-Ofast # 不严格遵循标准(浮点)
推荐:
-O2 -march=native -mtune=native
-flto
配合:
-Wl,--strip-all
-DNDEBUG
-g避免线程在 CPU 间漂移:
#include <sched.h>
cpu_set_t mask;
CPU_ZERO(&mask);
CPU_SET(0, &mask);
sched_setaffinity(0, sizeof(mask), &mask);
sudo cpupower frequency-set -g performance
适合大内存、低延迟:
echo 1024 > /proc/sys/vm/nr_hugepages
代码中用 mmap(MAP_HUGETLB)
O_DIRECTfsyncio_uring(高并发 IO)new/deletestd::vector 而非 std::list// 差
for (int j = 0; j < N; j++)
for (int i = 0; i < N; i++)
a[i][j]++;
// 好
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
a[i][j]++;
std::atomicthread_localvirtualperf top
perf record ./app
perf report
valgrind --tool=memcheck
heaptrack
perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > out.svg
thread sanitizer
-fsanitize=thread
❌ -O3 一定比 -O2 快
❌ 多线程一定更快
❌ 过早优化
✅ 先测再改
✅ 抓热点(90% 时间花在 10% 代码)
g++ -O2 -march=native -flto -DNDEBUG main.cpp -o app
运行:
taskset -c 0,1 ./app
如果你愿意,可以告诉我:
我可以给你更针对性的 Linux C++ 优化方案。