下载此文档

2020年C 代码优化经验总结.doc


文档分类:IT计算机 | 页数:约33页 举报非法文档有奖
1/33
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/33 下载此文档
文档列表 文档介绍
C++代码优化经验总结优化是一个非常大的主题,本文并不是去深入探讨性能分析理论,算法的效率,况且我也没有这个能力。我只是想把一些可以简单的应用到你的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运算符的选择也会影响性能。这一部分我们集中讨论四个问题:赋值,在程序确实要使用的地方放置声明,构造函数的初始化列表,prefixpostfix运算符。(1)请使用初始化而不是赋值在C语言中只允许在一个函数体的开头进行变量的声明,然而在C++中声明可以出现在程序的任何位置。这样做的目的是希望把对象的声明拖延到确实要使用它的时候再进行。这样做可以有两个好处:。如果对象在开头就被声明然而却在20行以后才被使用的话,就不能做这样的保证。,从前声明只能放在开头,然而往往开始的时候我们还没有获得我们想要的值,因此初始化所带来的好处就无法被应用。但是现在我们可以在我们获得了想要的值的时候直接进行初始化,从而省去了一步。注意,或许对于基本类型来说,初始化和赋值之间可能不会有什么差异,但是对于用户定义的类型来说,二者就会带来显著的不同,因为赋值会多进行一次函数调用----operator=。因此当我们在赋值和初始化之间进行选择的话,初始化应该是我们的首选。(2)把声明放在合适的位置上在一些场合,通过移动声明到合适的位置所带来的性能提升应该引起我们足够的重视。例如: boolis_C_Needed(); voiduse() { Cc1; if(is_C_Needed()==false) { return;//c1wasnotneeded } //usec1here return; }上面这段代码中对象c1即使在有可能不使用它的情况下也会被创建,这样我们就会为它付出不必要的花费,有可能你会说一个对象c1能浪费多少时间,1[1000];我想就不是说浪费就浪费了。但是我们可以通过移动声明c1的位置来改变这种情况: voiduse() { if(is_C_Needed()==false) { return;//c1wasnotneeded } Cc1;//movedfromtheblock'sbeginning //usec1here return; }怎么样,程序的性能是不是已经得到很大的改善了呢?因此请仔细分析你的代码,把声明放在合适的位置上,它所带来的好处是你难以想象的。(3)初始化列表我们都知道,初始化列表一般是用来初始化const或者reference数据成员。但是由于他自身的性质,我们可以通过使用初始化列表来实现性能的提升。我们先来看一段程序: classPerson { private: Cc_1; Cc_2; public: Person(constC&c1,constC&c2):c_1(c1),c_2(c2){} };当然构造函数我们也可以这样写: Person::Person(constC&c1,constC&c2) { c_1=c1; c_2=c2; }那么究竟二者会带来什么样的性能差异呢,要想搞清楚这个问题,我们首先要搞清楚二者是如何执行的,先来看初始化列表:数据成员的声明操作都是在构造函数执行之前就完成了,在构造函数中往往完成的只是赋值操作,然而初始化列表直接是在数据成员声明的时候就进行了初始化,因

2020年C 代码优化经验总结 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数33
  • 收藏数0 收藏
  • 顶次数0
  • 上传人读书百遍
  • 文件大小37 KB
  • 时间2020-02-23