- 1、本文档共33页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++代码优化经验总结
优化是一个非常大的主题,本文并不是去深入探讨性能分析理论,算法的效率,况且我也没有这个能力。我只是想把一些可以简单的应用到你的C++代码中的优化技术总结在这里,这样,当你遇到几种不同的编程策略的时候,就可以对每种策略的性能进行一个大概的估计。这也是本文的目的之所在.
目录:
一. 优化之前
二. 声明的放置
三. 内联函数
四. 优化你的内存使用
五. 速度优化
六. 最后的求助
一. 优化之前
在进行优化之前,我们首先应该做的是发现我们代码的瓶颈(bottleneck)在哪里。
然而当你做这件事情的时候切忌从一个debug-version进行推断,因为debug-version中包
含了许多额外的代码。一个debug-version可执行体要比release-version大出40%。那些额
外的代码都是用来支持调试的,比如说符号的查找。大多数实现都为debug-version和rele
ase-version提供了不同的operator new以及库函数。而且,一个release-version的执行
体可能已经通过多种途径进行了优化,包括不必要的临时对象的消除,循环展开,把对象
移入寄存器,内联等等。
另外,我们要把调试和优化区分开来,它们是在完成不同的任务。 debug-version 是
用来追捕bugs以及检查程序是否有逻辑上的问题。release-version则是用来做一些性能上
的调整以及进行优化。
下面就让我们来看看有哪些代码优化技术吧!
二. 声明的放置
程序中变量和对象的声明放在什么位置将会对性能产生显著影响。同样,对postfix和
prefix运算符的选择也会影响性能。这一部分我们集中讨论四个问题:初始化v.s 赋值,
在程序确实要使用的地方放置声明,构造函数的初始化列表,prefix v.s postfix运算符
。
(1) 请使用初始化而不是赋值
在C语言中只允许在一个函数体的开头进行变量的声明,然而在C++中声明可以出现在
程序的任何位置。这样做的目的是希望把对象的声明拖延到确实要使用它的时候再进行。
这样做可以有两个好处:1. 确保了对象在它被使用前不会被程序的其他部分恶意修改。如
果对象在开头就被声明然而却在20行以后才被使用的话,就不能做这样的保证。2. 使我们
有机会通过用初始化取代赋值来达到性能的提升,从前声明只能放在开头,然而往往开始
的时候我们还没有获得我们想要的值,因此初始化所带来的好处就无法被应用。但是现在
我们可以在我们获得了想要的值的时候直接进行初始化,从而省去了一步。注意,或许对
于基本类型来说,初始化和赋值之间可能不会有什么差异,但是对于用户定义的类型来说
,二者就会带来显著的不同,因为赋值会多进行一次函数调用----operator =。因此当我
们在赋值和初始化之间进行选择的话,初始化应该是我们的首选。
(2) 把声明放在合适的位置上
在一些场合,通过移动声明到合适的位置所带来的性能提升应该引起我们足够的重视
。例如:
bool is_C_Needed();
void use()
{
C c1;
if (is_C_Needed() == false)
{
return; //c1 was not needed
}
//use c1 here
return;
}
上面这段代码中对象c1即使在有可能不使用它的情况下也会被创建,这样我们就会为它付
出不必要的花费,有可能你会说一个对象c1能浪费多少时间,但是如果是这种情况呢:C
c1[1000];我想就不是说浪费就浪费了。但是我们可以通过移动声明c1的位置来改变这种情
况:
void use()
{
if (is_C_Needed() == false)
{
return; //c1 was not needed
}
C c1; //moved from the blocks beginning
//use c1 here
return;
}
怎么样,程序的性能是不是已经得到很大的改善了呢?因此请仔细分析你的代码,把声明
放在合适的位置上,它所带来的好处是你难以想象的。
(3) 初始化列表
我们都知道,初始化列表一般是用来初始化const或者reference数据成员。但是由于
他自身的性质,我们可以通过使用初始化列表来实现性能的提升。我们先来看一段程序:
class Person
{
p
您可能关注的文档
- ug运动分析高级教程--第9章运动仿真.doc
- Visual Basic程序设计说课课件.ppt
- “雨巷诗人”戴望舒.ppt
- 《离散数学》.doc
- 9.1平面的基本性质1教案.doc
- C++内存管理详解.doc
- CPU核心指令集发展回顾.doc
- Ghost前的系统配置大全.doc
- IE典型故障解决大全.doc
- Java 高层网络编程.doc
- 2022-2023学年广东省梅州市兴宁市人教版六年级下册期末学科素养形成测试数学试卷2056.pdf
- 2024年一级注册建筑师《建筑结构》试题及答案(卷24).pdf
- 2023年物权法试题.pdf
- 初中英语时态语态练习100题.pdf
- 2021—2022学年部编版语文九年级下册语文名著导读考点汇编--部编人教版九年级总复习.pdf
- 从分散到整体-工业革命与全球联系的建立与发展(讲义)(原卷版)-2024年高考历史二轮复习(新教材).pdf
- 人教版八年级英语上册期末测试题.pdf
- 山东省曲阜市陵城镇果庄小学英语六年级小升初期末复习试卷(含答案) (2).pdf
- 湖北省襄阳市枣阳市2023届三下数学期末含解析.pdf
- 工业机器人产业调研表.pdf
文档评论(0)