- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c++代码优化总结
一。 优化之前在进行优化之前,我们首先应该做的是发现我们代码的瓶颈(bottleneck)在
哪里。然而当你做这件事情的时候切忌从一个debug-version 进行推断,因为debug-version
中包含了许多额外的代码。一个debug-version 可执行体要比release-version 大出40%.那些
额外的代码都是用来支持调试的,比如说符号的查找。大多数实现都为 debug-version 和
release-version 提供了不同的operatornew 以及库函数。而且,一个release-version 的执行体
可能已经通过多种途径进行了优化,包括不必要的临时对象的消除,循环展开,把对象移入
寄存器,内联等等。
另外,我们要把调试和优化区分开来,它们是在完成不同的任务。 debug-version 是用
来追捕bugs以及检查程序是否有逻辑上的问题。release-version 则是用来做一些性能上的调
整以及进行优化。
下面就让我们来看看有哪些代码优化技术吧:
二。 声明的放置程序中变量和对象的声明放在什么位置将会对性能产生显著影响。同
样,对postfix 和prefix 运算符的选择也会影响性能。这一部分我们集中讨论四个问题:初
始化v.s 赋值,在程序确实要使用的地方放置声明,构造函数的初始化列表,prefix v.s postfix
运算符。
(1) 请使用初始化而不是赋值在C 语言中只允许在一个函数体的开头进行变量的声
明,然而在C++中声明可以出现在程序的任何位置。这样做的目的是希望把对象的声明拖延
到确实要使用它的时候再进行。这样做可以有两个好处:1. 确保了对象在它被使用前不会
被程序的其他部分恶意修改。如果对象在开头就被声明然而却在20 行以后才被使用的话,
就不能做这样的保证。2. 使我们有机会通过用初始化取代赋值来达到性能的提升,从前声
明只能放在开头,然而往往开始的时候我们还没有获得我们想要的值,因此初始化所带来的
好处就无法被应用。但是现在我们可以在我们获得了想要的值的时候直接进行初始化,从而
省去了一步。注意,或许对于基本类型来说,初始化和赋值之间可能不会有什么差异,但是
对于用户定义的类型来说,二者就会带来显著的不同,因为赋值会多进行一次函数调用
——operator=.因此当我们在赋值和初始化之间进行选择的话,初始化应该是我们的首选。
(2) 把声明放在合适的位置上在一些场合,通过移动声明到合适的位置所带来的性能
提升应该引起我们足够的重视。例如:
boolis_C_Needed();
void use()
{
Cc1;
if (is_C_Needed() ==
false)
{
return; //c1 was not
needed
}
//usec1 here
return;
}
上面这段代码中对象c1即使在有可能不使用它的情况下也会被创建,这样我们就会为
它付出不必要的花费,有可能你会说一个对象c1能浪费多少时间,但是如果是这种情况呢:
C c1[1000];我想就不是说浪费就浪费了。但是我们可以通过移动声明c1的位置来改变这
种情况:
voiduse()
{
if (is_C_Needed() == false)
{
文档评论(0)