C++性能优化:提升代码执行效率的艺术

C++性能优化:提升代码执行效率的艺术

C++性能优化:提升代码执行效率的艺术

在这里插入图片描述

一、学习目标与重点

本章将深入探讨C++性能优化的核心知识,帮助你掌握提升代码执行效率的艺术。通过学习,你将能够:

  1. 理解性能优化的基本概念,掌握性能分析的方法
  2. 学会优化内存管理,减少内存泄漏和内存碎片
  3. 理解CPU优化技巧,提高代码的执行速度
  4. 学会优化I/O操作,提升文件和网络读写的效率
  5. 培养性能优化思维,设计高效的代码

二、性能优化的基本概念

2.1 性能优化的原则

性能优化应该遵循以下原则:

  • 先测量后优化:在优化之前,必须先测量代码的性能,找出瓶颈所在
  • 优化瓶颈:只优化对性能影响最大的部分
  • 保持代码的可维护性:优化后的代码应该易于理解和维护
  • 测试优化结果:优化后必须测试代码的正确性和性能提升效果

2.2 性能分析工具

常用的性能分析工具包括:

  • GProf:GNU的性能分析工具
  • Valgrind:内存调试和性能分析工具
  • Perf:Linux下的性能分析工具
  • Visual Studio Profiler:Windows下的性能分析工具

三、内存管理优化

3.1 内存泄漏的检测与修复

#include<iostream>#include<memory>// 使用智能指针避免内存泄漏classMyClass{public:MyClass(){ std::cout <<"MyClass 构造函数"<< std::endl;}~MyClass(){ std::cout <<"MyClass 析构函数"<< std::endl;}voiddoSomething(){ std::cout <<"MyClass 正在做某事"<< std::endl;}};// 使用智能指针voiduseSmartPointer(){ std::shared_ptr<MyClass> ptr = std::make_shared<MyClass>(); ptr->doSomething();// 智能指针会自动释放内存,不需要手动调用delete}// 手动管理内存(可能导致内存泄漏)voiduseManualMemory(){ MyClass* ptr =newMyClass(); ptr->doSomething();// 忘记调用delete,导致内存泄漏}intmain(){ std::cout <<"=== 内存管理优化示例 ==="<< std::endl; std::cout <<"使用智能指针:"<< std::endl;useSmartPointer(); std::cout << std::endl; std::cout <<"手动管理内存:"<< std::endl;useManualMemory();return0;}

3.2 内存碎片的优化

#include<iostream>#include<vector>// 预分配内存避免内存碎片voidpreallocateMemory(){constint size =10000; std::vector<int> vec; vec.reserve(size);// 预分配内存for(int i =0; i < size;++i){ vec.push_back(i);}}// 不预分配内存(可能导致内存碎片)voidnotPreallocateMemory(){constint size =10000; std::vector<int> vec;for(int i =0; i < size;++i){ vec.push_back(i);}}intmain(){ std::cout <<"=== 内存碎片优化示例 ==="<< std::endl;// 测量预分配内存和不预分配内存的性能auto start = std::chrono::high_resolution_clock::now();preallocateMemory();auto end = std::chrono::high_resolution_clock::now();auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); std::cout <<"预分配内存耗时: "<< duration <<"微秒"<< std::endl; start = std::chrono::high_resolution_clock::now();notPreallocateMemory(); end = std::chrono::high_resolution_clock::now(); duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); std::cout <<"不预分配内存耗时: "<< duration <<"微秒"<< std::endl;return0;}

四、CPU优化技巧

4.1 循环优化

#include<iostream>#include<vector>#include<algorithm>// 优化循环:合并操作voidoptimizedLoop(){constint size =10000; std::vector<int>vec1(size,1); std::vector<int>vec2(size,2); std::vector<int>result(size,0);for(int i =0; i < size;++i){ result[i]= vec1[i]+ vec2[i];}}// 未优化的循环:多次遍历voidunoptimizedLoop(){constint size =10000; std::vector<int>vec1(size,1); std::vector<int>vec2(size,2); std::vector<int>result(size,0);for(int i =0; i < size;++i){ result[i]= vec1[i];}for(int i =0; i < size;++i){ result[i]+= vec2[i];}}intmain(){ std::cout <<"=== 循环优化示例 ==="<< std::endl;// 测量优化循环和未优化循环的性能auto start = std::chrono::high_resolution_clock::now();optimizedLoop();auto end = std::chrono::high_resolution_clock::now();auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); std::cout <<"优化循环耗时: "<< duration <<"微秒"<< std::endl; start = std::chrono::high_resolution_clock::now();unoptimizedLoop(); end = std::chrono::high_resolution_clock::now(); duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); std::cout <<"未优化循环耗时: "<< duration <<"微秒"<< std::endl;return0;}

4.2 函数优化

#include<iostream>#include<vector>#include<algorithm>// 优化函数:使用内联函数inlineintadd(int a,int b){return a + b;}// 未优化的函数:普通函数调用intaddNotInline(int a,int b){return a + b;}// 测试函数调用开销voidtestFunctionCallOverhead(){constint size =1000000;int result =0;auto start = std::chrono::high_resolution_clock::now();for(int i =0; i < size;++i){ result +=add(i, i);}auto end = std::chrono::high_resolution_clock::now();auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); std::cout <<"内联函数调用耗时: "<< duration <<"微秒"<< std::endl; start = std::chrono::high_resolution_clock::now();for(int i =0; i < size;++i){ result +=addNotInline(i, i);} end = std::chrono::high_resolution_clock::now(); duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); std::cout <<"普通函数调用耗时: "<< duration <<"微秒"<< std::endl;}intmain(){ std::cout <<"=== 函数优化示例 ==="<< std::endl;testFunctionCallOverhead();return0;}

五、I/O操作优化

5.1 文件I/O优化

#include<iostream>#include<fstream>#include<vector>#include<string>// 优化文件I/O:使用缓冲区voidoptimizedFileIO(){const std::string filename ="test.txt";constint size =10000; std::ofstream file(filename); file.rdbuf()->pubsetbuf(nullptr,0);// 禁用缓冲区for(int i =0; i < size;++i){ file << i << std::endl;} file.close();}// 未优化的文件I/O:使用默认缓冲区voidunoptimizedFileIO(){const std::string filename ="test.txt";constint size =10000; std::ofstream file(filename);for(int i =0; i < size;++i){ file << i << std::endl;} file.close();}intmain(){ std::cout <<"=== 文件I/O优化示例 ==="<< std::endl;// 测量优化文件I/O和未优化文件I/O的性能auto start = std::chrono::high_resolution_clock::now();optimizedFileIO();auto end = std::chrono::high_resolution_clock::now();auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); std::cout <<"优化文件I/O耗时: "<< duration <<"微秒"<< std::endl; start = std::chrono::high_resolution_clock::now();unoptimizedFileIO(); end = std::chrono::high_resolution_clock::now(); duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count(); std::cout <<"未优化文件I/O耗时: "<< duration <<"微秒"<< std::endl;return0;}

5.2 网络I/O优化

#include<iostream>#include<vector>#include<string>#include<boost/asio.hpp>#include<chrono>using boost::asio::ip::tcp;usingnamespace std;// 优化网络I/O:使用异步操作voidoptimizedNetworkIO(){try{ boost::asio::io_service io_service; tcp::resolver resolver(io_service); tcp::resolver::query query("example.com","http"); tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); tcp::socket socket(io_service); boost::asio::connect(socket, endpoint_iterator); std::string request ="GET / HTTP/1.1\r\n"; request +="Host: example.com\r\n"; request +="Connection: close\r\n\r\n"; boost::asio::write(socket, boost::asio::buffer(request)); boost::asio::streambuf response; boost::asio::read_until(socket, response,"\r\n"); string status_line; istringstream response_stream(&response); response_stream >> status_line;}catch(const std::exception& e){ cerr <<"错误: "<< e.what()<< endl;}}// 未优化的网络I/O:使用同步操作voidunoptimizedNetworkIO(){try{ boost::asio::io_service io_service; tcp::resolver resolver(io_service); tcp::resolver::query query("example.com","http"); tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); tcp::socket socket(io_service); boost::asio::connect(socket, endpoint_iterator); std::string request ="GET / HTTP/1.1\r\n"; request +="Host: example.com\r\n"; request +="Connection: close\r\n\r\n"; boost::asio::write(socket, boost::asio::buffer(request)); string response;char buffer[1024]; size_t len;while((len = socket.read_some(boost::asio::buffer(buffer)))>0){ response.append(buffer, len);}}catch(const std::exception& e){ cerr <<"错误: "<< e.what()<< endl;}}intmain(){ std::cout <<"=== 网络I/O优化示例 ==="<< std::endl;// 测量优化网络I/O和未优化网络I/O的性能auto start = std::chrono::high_resolution_clock::now();optimizedNetworkIO();auto end = std::chrono::high_resolution_clock::now();auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count(); std::cout <<"优化网络I/O耗时: "<< duration <<"毫秒"<< std::endl; start = std::chrono::high_resolution_clock::now();unoptimizedNetworkIO(); end = std::chrono::high_resolution_clock::now(); duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count(); std::cout <<"未优化网络I/O耗时: "<< duration <<"毫秒"<< std::endl;return0;}

六、综合案例:优化矩阵乘法算法

6.1 项目结构

MatrixMultiplicationOptimization/ ├── include/ │ └── Matrix.h ├── src/ │ ├── Matrix.cpp │ └── main.cpp └── build/ 

6.2 核心代码

// include/Matrix.h#ifndefMATRIX_H#defineMATRIX_H#include<vector>#include<chrono>usingnamespace std;usingnamespace chrono;classMatrix{public:Matrix(int rows,int cols);Matrix(const vector<vector<int>>& data);intgetRows()const;intgetCols()const;int&operator()(int row,int col);constint&operator()(int row,int col)const; Matrix multiplyNaive(const Matrix& other)const; Matrix multiplyOptimized(const Matrix& other)const;voidprint()const;private:int rows_;int cols_; vector<vector<int>> data_;};#endif// MATRIX_H// src/Matrix.cpp#include"Matrix.h"#include<iostream>Matrix::Matrix(int rows,int cols):rows_(rows),cols_(cols),data_(rows,vector<int>(cols,0)){}Matrix::Matrix(const vector<vector<int>>& data):rows_(data.size()),cols_(data[0].size()),data_(data){}intMatrix::getRows()const{return rows_;}intMatrix::getCols()const{return cols_;}int&Matrix::operator()(int row,int col){return data_[row][col];}constint&Matrix::operator()(int row,int col)const{return data_[row][col];} Matrix Matrix::multiplyNaive(const Matrix& other)const{if(cols_ != other.rows_){throwinvalid_argument("矩阵尺寸不兼容");} Matrix result(rows_, other.cols_);for(int i =0; i < rows_;++i){for(int j =0; j < other.cols_;++j){for(int k =0; k < cols_;++k){result(i, j)+= data_[i][k]* other.data_[k][j];}}}return result;} Matrix Matrix::multiplyOptimized(const Matrix& other)const{if(cols_ != other.rows_){throwinvalid_argument("矩阵尺寸不兼容");} Matrix result(rows_, other.cols_); vector<vector<int>> otherTransposed = other.getTransposed();for(int i =0; i < rows_;++i){for(int j =0; j < other.cols_;++j){int sum =0;for(int k =0; k < cols_;++k){ sum += data_[i][k]* otherTransposed[j][k];}result(i, j)= sum;}}return result;} vector<vector<int>>Matrix::getTransposed()const{ vector<vector<int>>transposed(cols_,vector<int>(rows_));for(int i =0; i < rows_;++i){for(int j =0; j < cols_;++j){ transposed[j][i]= data_[i][j];}}return transposed;}voidMatrix::print()const{for(constauto& row : data_){for(int value : row){ cout << value <<" ";} cout << endl;}}// src/main.cpp#include<iostream>#include<vector>#include<chrono>#include"Matrix.h"usingnamespace std;usingnamespace chrono;intmain(){ std::cout <<"=== 矩阵乘法优化示例 ==="<< std::endl;// 创建两个矩阵constint size =100; Matrix matrix1(size, size); Matrix matrix2(size, size);for(int i =0; i < size;++i){for(int j =0; j < size;++j){matrix1(i, j)= i + j;matrix2(i, j)= i * j;}}// 测试朴素算法auto start = high_resolution_clock::now(); Matrix resultNaive = matrix1.multiplyNaive(matrix2);auto end = high_resolution_clock::now();auto duration =duration_cast<milliseconds>(end - start).count(); std::cout <<"朴素算法耗时: "<< duration <<"毫秒"<< std::endl;// 测试优化算法 start = high_resolution_clock::now(); Matrix resultOptimized = matrix1.multiplyOptimized(matrix2); end = high_resolution_clock::now(); duration =duration_cast<milliseconds>(end - start).count(); std::cout <<"优化算法耗时: "<< duration <<"毫秒"<< std::endl;return0;}

6.3 项目构建与运行

# 创建构建目录mkdir-p build &&cd build # 配置CMake cmake -DCMAKE_BUILD_TYPE=Release ..# 编译项目 cmake --build.--config Release # 运行程序 ./MatrixMultiplicationOptimization 

七、总结与练习

7.1 本章总结

本章介绍了C++性能优化的核心知识,包括:

  1. 性能优化的基本概念与原则
  2. 内存管理优化
  3. CPU优化技巧
  4. I/O操作优化
  5. 综合案例:优化矩阵乘法算法

7.2 练习题

  1. 写一个程序,使用GProf或Perf分析代码的性能。
  2. 编写一个函数,使用智能指针避免内存泄漏。
  3. 写一个程序,使用内存对齐优化代码的性能。
  4. 实现一个类,使用循环优化提升代码的执行速度。
  5. 写一个程序,使用异步I/O提升文件读写的效率。

7.3 进阶挑战

  1. 研究如何使用C++的SIMD指令集优化循环。
  2. 学习如何使用C++的并发编程优化CPU密集型任务。
  3. 研究如何使用C++的内存池优化内存管理。
  4. 学习如何使用C++的缓存优化技术提升代码的性能。
  5. 研究如何使用C++的JIT编译技术优化代码的执行速度。

Read more

2026最新|国内可用 Docker 镜像加速源大全(2月持续更新):DockerHub 镜像加速与限速避坑全指南(适配 Windows / macOS / Linux / containerd /

2026最新|国内可用 Docker 镜像加速源大全(2月持续更新):DockerHub 镜像加速与限速避坑全指南(适配 Windows / macOS / Linux / containerd /

2026最新|国内可用 Docker 镜像加速源大全(2月持续更新):DockerHub 镜像加速与限速避坑全指南(适配 Windows / macOS / Linux / containerd / k3s / BuildKit) 摘要:本指南面向国内服务器与办公网络用户,系统梳理 2026年2月可用 DockerHub 镜像加速源,覆盖 Docker Desktop、dockerd、containerd、k3s、BuildKit 等场景的一键配置、多源回退与测速排障方案,帮助规避 429/Too Many Requests 与拉取超时问题。 最后更新:2026-2 适用对象:国内云服务器/办公网络拉取 DockerHub 镜像慢、易触发限速(429/“Too Many Requests”)的场景 用途:一键配置镜像加速、

By Ne0inhk

Flutter 三方库 jaguar 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、透明、全能的工业级嵌入式 HTTP 服务端框架与 REST API 交互引擎

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 jaguar 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、透明、全能的工业级嵌入式 HTTP 服务端框架与 REST API 交互引擎 在鸿蒙(OpenHarmony)系统的端侧服务器化、分布式设备互联监控、或者是需要将鸿蒙应用转变为一个能够提供 API 服务的微型网关(如鸿蒙版物联网中枢)场景中,如何通过一套 Dart 代码构建出极致稳健、带路由拦截、支持 Session 且完全透明的 HTTP 服务?jaguar 为开发者提供了一套工业级的、基于生产环境优化的服务端处理方案。本文将深入实战其在鸿蒙端侧服务化中的应用。 前言 什么是 Jaguar?它不是一个普通的 HTTP 监听器,而是一个专为“速度”与“扩展性”

By Ne0inhk
Flutter 三方库 wallet_connect 的鸿蒙化适配指南 - 实现 Web3 钱包协议连接、支持 DApp 授权登录与跨链交易签名实战

Flutter 三方库 wallet_connect 的鸿蒙化适配指南 - 实现 Web3 钱包协议连接、支持 DApp 授权登录与跨链交易签名实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 wallet_connect 的鸿蒙化适配指南 - 实现 Web3 钱包协议连接、支持 DApp 授权登录与跨链交易签名实战 前言 在进行 Flutter for OpenHarmony 的去中心化应用(DApp)或加密货币钱包开发时,支持标准的 WalletConnect 协议是链接用户钱包的关键。wallet_connect 是该协议的 Dart 实现,它能让你的鸿蒙 App 安全地与 MetaMask、Trust Wallet 等钱包建立双向加密连接。本文将探讨如何在鸿蒙系统下构建安全、稳定的 Web3 授权流程。 一、原理解析 / 概念介绍 1.1 基础原理

By Ne0inhk
Flutter 组件 simple_cluster 的适配 鸿蒙Harmony 实战 - 驾驭轻量级集群分发架构、实现鸿蒙端多节点任务调度与高性能负载均衡方案

Flutter 组件 simple_cluster 的适配 鸿蒙Harmony 实战 - 驾驭轻量级集群分发架构、实现鸿蒙端多节点任务调度与高性能负载均衡方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 simple_cluster 的适配 鸿蒙Harmony 实战 - 驾驭轻量级集群分发架构、实现鸿蒙端多节点任务调度与高性能负载均衡方案 前言 在鸿蒙(OpenHarmony)生态迈向“万物互联、万物协同”的深水区后,单一设备孤岛式的算力模式已经无法满足复杂的工业控制、分布式协同办公以及大规模 IoT 设备管理的需求。面对需要将一个繁重的计算任务(如:海量 Hex 数据的指纹比对)分发给附近的 5 台鸿蒙平板协同处理;面对需要管理数十个传感器节点的实时状态同步。 如果依靠传统的手动 Socket 连接管理。那么不仅会导致通讯代码极其臃肿且难以维护。更会因为缺乏确定性的负载均衡(Load Balancing)与节点心跳(Heartbeat)逻辑。引发整个系统的雪崩式失效方案。 我们需要一种“逻辑集群化、操作极简化”的算力平衡艺术。

By Ne0inhk