一、优化的前提:先测量,再优化
在开始优化前,永远不要凭感觉优化。首先要通过性能分析工具找到程序的性能瓶颈(热点),再针对性优化。
- 常用工具:
- Linux:
perf、gprof、valgrind (callgrind) - Windows: Visual Studio Profiler、Intel VTune
- 跨平台:Google Benchmark(代码级性能测试)
- Linux:
二、编译期优化(最易实施,收益高)
编译器自带的优化选项能在不修改代码的情况下大幅提升性能,是优化的第一步。
1. GCC/Clang 编译优化级别
# O0:默认,无优化(调试用)
# O1:基础优化,减少代码大小和执行时间,不增加编译时间
# O2:主流优化级别,开启几乎所有安全的优化(推荐生产环境使用)
# O3:激进优化(可能增大二进制体积,甚至引入兼容性问题)
# Os:优化代码体积(嵌入式/移动端适用)
g++ -O2 your_code.cpp -o your_program
2. 针对性编译选项
# 针对特定 CPU 架构优化(充分利用 CPU 指令集)
g++ -O2 -march=native your_code.cpp
# 自动适配当前 CPU 架构
# 开启链接时优化(LTO),跨编译单元优化
g++ -O2 -flto your_code.cpp
# 启用 C++ 最新标准(新标准可能有性能优化)
g++ -O2 -std=c++20 your_code.cpp
三、代码级优化(核心优化手段)
1. 减少不必要的拷贝(C++ 性能杀手 TOP1)
- 避免隐式类型转换:比如
int和double混合运算会触发类型转换,增加开销。
使用移动语义(C++11+) :对于临时对象,用 std::move 转移资源,避免拷贝:
std::vector<int> create_big_vector() {
std::vector<int> vec(100000);
return vec; // C++11 后自动移动,无需 std::move
}
std::vector<int> vec = create_big_vector(); // 无拷贝
使用引用(&) 或常量引用(const &) 代替值传递:

