c++性能优化
基本常识
bit(b) :一个bit位,只能为0或者1
byte(B) = 8 个 bit
KB = 1024 * byte
MB = 1024 KM
GB = 1024 MB
一个char = 1B,sizeof求出的是多少个char的大小
注意内存对齐对内存读取次数的影响,对齐会减少内存访问次数
存储器层次速度的估算
一种大致的估算经验是,高速缓存层次中每一层的速度大约是它下面一层的 10 倍。在桌面级处理器中,通过一级高速缓存、二级高速缓存、三级高速缓存、主内存和磁盘上的虚拟内存页访问内存的时间开销范围可以跨越五个数量级
因为cpu计算速度要比内存访问快很多,实际上需要尽可能的使得cpu部件处于满负载的状态
这个瓶颈被称作:
小结
• 在处理器中,访问内存的性能开销远比其他操作的性能开销大。
• 非对齐访问所需的时间是所有字节都在同一个字中时的两倍。
• 访问频繁使用的内存地址的速度比访问非频繁使用的内存地址的速度快。
• 访问相邻地址的内存的速度比访问互相远隔的地址的内存快。
• 由于高速缓存的存在,一个函数运行于整个程序的上下文中时的执行速度可能比运行于
测试套件中时更慢。
• 访问线程间共享的数据比访问非共享的数据要慢很多。
• 计算比做决定快。
• 每个程序都会与其他程序竞争计算机资源。
• 如果一个程序必须在启动时执行或是在负载高峰期时执行,那么在测量性能时必须加载
负载。
• 每一次赋值、函数参数的初始化和函数返回值都会调用一次构造函数,这个函数可能隐
藏了大量的未知代码。
• 有些语句隐藏了大量的计算。从语句的外表上看不出语句的性能开销会有多大。
• 当并发线程共享数据时,同步代码降低了并发量。
关键点
1.malloc free是非常昂贵的
2.读内存对性能影响很大,解引用指针会导致两次内存访问,特别是const&容器的时候,用迭代器来降低性能开销
优化步骤
那些具有最让我折服的优化技巧的开发人员都会系统地完成他们的优化任务:
• 他们做出的预测都是可测试的,而且他们会记录下预测;
• 他们保留代码变更记录;
• 他们使用可以使用的最优秀的工具进行测量;
• 他们会保留实验结果的详细笔记;
经典加速比计算公式
程序花费100秒计算,其中80秒调用f,把f的运行时间缩短30%
也就是说会让整体的运行时间缩短22%
本文来自博客园,作者:XDU18清欢,转载请注明原文链接:https://www.cnblogs.com/XDU-mzb/p/16335976.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)