C++性能优化擂台
2025-07-15 23:03:33
12
C++性能优化擂台
基本概念
性能优化目标:减少执行时间/降低内存占用
优化层次:算法级/代码级/系统级
优化原则:先测量后优化/保持代码可读性
关键优化技术
2.1 内存优化
使用对象池避免频繁分配
预分配内存减少动态分配
使用智能指针管理资源
示例:
// 原始版本 for(int i=0; i<1000; i++){ auto p = new MyObject(); // 使用p delete p; } // 优化版本 ObjectPool<MyObject> pool(1000); for(int i=0; i<1000; i++){ auto p = pool.acquire(); // 使用p pool.release(p); }
2.2 循环优化
减少循环内部计算
展开循环减少判断
使用更高效的迭代方式
示例:
// 原始版本 for(int i=0; i<100; i++){ result += data[i] * coefficient; } // 优化版本 int sum = 0; const int step = 4; for(int i=0; i<100; i+=step){ sum += data[i] * coefficient; sum += data[i+1] * coefficient; sum += data[i+2] * coefficient; sum += data[i+3] * coefficient; } result = sum;
2.3 多线程优化
使用线程池避免创建开销
合理分配任务粒度
减少锁竞争
示例:
// 原始版本 std::mutex mtx; int counter = 0; void increment(){ std::lock_guard<std::mutex> lock(mtx); counter++; } // 优化版本 std::atomic<int> counter(0); void increment(){ counter.fetch_add(1, std::memory_order_relaxed); }
高级优化技术
3.1 SIMD指令优化
使用编译器内置函数
数据对齐处理
批量处理数据
示例:
// 原始版本 void addArrays(float* a, float* b, float* c, int n){ for(int i=0; i<n; i++){ c[i] = a[i] + b[i]; } } // 优化版本(使用AVX) #include <immintrin.h> void addArrays(float* a, float* b, float* c, int n){ for(int i=0; i<n; i+=8){ __m256 va = _mm256_load_ps(a+i); __m256 vb = _mm256_load_ps(b+i); __m256 vc = _mm256_add_ps(va, vb); _mm256_store_ps(c+i, vc); } }
3.2 缓存优化
提高数据局部性
避免缓存伪共享
优化数据结构布局
示例:
// 原始版本 struct Data { int a; bool flag; int b; }; // 优化版本(减少padding) struct alignas(64) Data { // 缓存行对齐 int a; int b; bool flag; char padding[64 - sizeof(int)*2 - sizeof(bool)]; };
工具支持
性能分析工具:perf/VTune
内存分析工具:Valgrind
编译器优化选项:-O3/-march=native
优化流程
性能分析定位瓶颈
设计优化方案
实现并测试优化
验证优化效果
重复迭代