在 Ubuntu 上用 C++ 提高性能,可以从编译、代码、系统、工具链多个层面入手。下面按“实用优先级”给你一个系统性的清单。
g++ -O2 main.cpp -o main
或更激进(需测试稳定性):
g++ -O3 -march=native -mtune=native main.cpp -o main
说明:
-O2:常用、稳定-O3:更高优化(可能增大二进制)-march=native:针对本机 CPU 指令集Ubuntu 默认 g++ 可能较老:
sudo apt install g++-12
g++-12 -O3 ...
或用 Clang(通常优化更好):
sudo apt install clang
clang++ -O3 main.cpp -o main
g++ -O3 -flto main.cpp -o main
大项目效果明显。
void f(const std::vector<int>& v); // 引用
auto& x = m[key]; // 避免拷贝
reservestd::vector<int> v;
v.reserve(1000000);
new/deletestd::vectoremplace_back 替代 push_backv.emplace_back(1, 2, 3);
std::atomicstd::shared_mutex#include <thread>
或使用:
std::asyncstd::execution::par(C++17)g++ -fopenmp main.cpp -o main
#pragma omp parallel for
for (int i = 0; i < n; i++) { ... }
查看核心数:
nproc
nice -n -10 ./main
sudo cpufreq-set -g performance
对内存密集型程序有效。
g++ -O2 -g main.cpp -o main
sudo perf record ./main
sudo perf report
perf script | flamegraph.pl > out.svg
valgrind --tool=callgrindgprofheaptrack(内存)std::endl → 用 '\n'cout → 用 printf 或缓冲std::string += 优于 +)// 优化前
for (int i=0; i<n; i++) v.push_back(i);
// 优化后
v.reserve(n);
for (int i=0; i<n; i++) v.emplace_back(i);
再配合:
g++ -O3 -march=native main.cpp -o main
通常可提升 数倍。
如果你愿意,可以:
我可以给你“针对性方案”,而不是泛泛而谈。