在 Ubuntu 下对 C++ 程序进行优化,通常可以从 编译器优化、代码层面优化、系统与工具链优化、性能分析 四个方面入手。下面给你一个比较系统、实用的总结。
g++ -O2 main.cpp -o main
常用优化选项:
| 选项 | 说明 |
|---|---|
-O0 |
无优化(方便调试) |
-O1 |
基础优化 |
-O2 ✅ |
推荐,性价比最高 |
-O3 |
激进优化(可能增大体积,收益有限) |
-Os |
优化体积 |
-Ofast |
激进 + 忽略严格标准(慎用) |
✅ 生产环境一般用 -O2
g++ -O2 -march=native -mtune=native main.cpp
-march=native:使用当前 CPU 的全部指令集(如 AVX2)g++ -O2 -flto main.cpp -o main
✅ 跨编译单元优化,适合中大型项目
⚠ 编译时间会变长
Ubuntu 默认的 g++ 可能较老:
sudo apt install g++-12
g++-12 -O2 main.cpp
或使用 Clang:
sudo apt install clang
clang++ -O2 main.cpp
Clang 在某些优化和错误信息上更友好。
#ifdef NDEBUG
// release
#endif
编译时:
g++ -O2 -DNDEBUG main.cpp
❌ 不好:
void f(std::vector<int> v);
✅ 好:
void f(const std::vector<int>& v);
std::vector<int> v = std::move(other);
| 场景 | 建议 |
|---|---|
| 查找 | unordered_map |
| 有序 | map |
| 随机访问 | vector |
| 频繁插入删除 | list / deque |
std::vector 而不是裸数组for (int i = 0; i < v.size(); ++i)
✅ 改为:
for (size_t i = 0, n = v.size(); i < n; ++i)
或:
for (auto& x : v)
sudo apt install linux-tools-common
perf stat ./main
perf record ./main
perf report
g++ -pg main.cpp
./main
gprof ./main gmon.out
sudo apt install heaptrack
heaptrack ./main
#include <thread>
std::thread#include <immintrin.h>
或使用:
-O2 编译perf 找到热点不要“盲优化”
❌ 过早优化
❌ 用 -O3 替代算法优化
❌ 忽略缓存友好性
❌ 在 Debug 模式下测性能
g++-12 -O2 -march=native -flto -DNDEBUG main.cpp -o main
如果你愿意,可以:
我可以给你 针对性的优化方案(甚至逐行分析)。