在 Ubuntu 下用 C++ 提升效率,一般可以从 编译优化、代码层面、系统/工具链、并发与架构 四个方面入手。下面给你一个实用、可落地的总结。
g++ -O2 main.cpp -o main
常用选项:
-O2:推荐,性价比最高-O3:更强,但可能增大体积、引入微小数值差异-march=native:针对本机 CPU 特性优化-flto:链接时优化(大型项目效果明显)示例:
g++ -O3 -march=native -flto main.cpp -o main
Ubuntu 自带 gcc 可能较旧:
sudo apt install gcc-13 g++-13
使用:
g++-13 -O3 main.cpp
void f(const std::string& s); // ✅
void f(std::string s); // ❌
使用:
std::moveemplace_back 代替 push_back| 场景 | 推荐 |
|---|---|
| 随机访问 | std::vector |
| 插入删除 | std::list / std::deque |
| 查找 | std::unordered_map |
| 有序 | std::map |
⚠️ std::map 比 unordered_map 慢很多
// 不好
for (...) {
std::vector<int> v;
}
// 好
std::vector<int> v;
v.reserve(1000);
std::sort 而不是手写排序std::lower_boundsudo apt install linux-tools-common
perf record ./main
perf report
g++ -pg main.cpp -o main
./main
gprof main gmon.out
sudo apt install heaptrack
heaptrack ./main
jemalloc / tcmalloc(替代 glibc malloc)sudo apt install libjemalloc-dev
#include <thread>
void task() {}
std::thread t(task);
t.join();
std::asyncThreadPool)#pragma omp parallel for
for (int i = 0; i < n; ++i) {}
编译:
g++ -fopenmp main.cpp
❌ 过早优化
❌ 手写汇编(除非极端场景)
❌ 盲目 -O3
❌ 忽略 cache 局部性
g++-13 -O3 -march=native -flto -fopenmp main.cpp -o main
配合:
perf 分析瓶颈vector + reserve如果你愿意,可以把你的 代码 / 使用场景(计算?IO?网络?) 发出来,我可以 针对性地帮你做性能优化方案。