在 Linux 环境下进行 C++ 性能优化,通常可以从编译、算法、系统调用、内存、并发、工具几个层面入手。下面给你一个比较系统、实用的优化思路。
使用 GCC / Clang 时:
-O2 # 常用优化
-O3 # 更激进(有时反而变慢)
-Os # 体积优化
-Ofast # 忽略严格标准(慎用)
推荐:
-O2 -march=native -pipe
-flto
跨文件优化,效果明显。
libstdc++(GCC)libc++(Clang,某些场景更快)-static
减少动态链接开销(但体积大)。
O(n) 就别用 O(n^2)unordered_map vs mapvector vs listflat_map(第三方)void f(const std::string& s); // 引用
auto&& x = get(); // 避免拷贝
std::vector<int> v = std::move(other);
new/deletestd::vector::reserve()std::vector<int> v;
v.reserve(100000);
// AOS
struct { int x; int y; } p[1000];
// SOA(更快)
int x[1000];
int y[1000];
多线程时:
alignas(64) int counter[8];
write → fwrite / mmap大文件处理:
mmap(nullptr, size, PROT_READ, MAP_PRIVATE, fd, 0);
cpu_set_t cpuset;
CPU_SET(2, &cpuset);
sched_setaffinity(pid, sizeof(cpuset), &cpuset);
对内存密集型程序有效。
std::atomicshared_mutexstd::thread::hardware_concurrency();
perf top
perf record ./app
perf report
-pg
gprof ./app gmon.out
valgrind --tool=callgrind ./app
-fsanitize=address-fsanitize=thread❌ 在热循环里 cout
❌ 频繁 malloc/free
❌ std::endl(用 '\n')
❌ 不必要的 std::function
❌ 滥用异常(热路径)
如果你有具体场景(如:网络服务器 / 游戏 / 数据处理 / 高频交易),我可以给你更针对性的优化方案。