连载:编写高效代码(2)——代码剖析,没有调查,就没有发言权 通常我们在编写程序时,第一版总是为了实现功能,不太注重代码效率,第二版才会进行代码的优化。我们读了这么多年的书,也都明白了一个道理:100分的总分,从60分提升到80分,不是太难,而从80分提升到100分,那就很难了。成绩和努力程度常常呈现出如下曲线,越到后来,收获就越小了。
成绩和努力程度的关系曲线
软件开发也是同样一个道理,项目开发都受到质量、成本、进度三要素的制约,尤其是在战机稍纵即逝的商界,时间更是宝贵,软件性能优化不可能无休止的进行下去,达到要求后就要收山,因此好钢必须要用在刀刃上,我们得先知道哪些代码值得优化,哪些代码不值得优化。 毛主席教导我们,没有调查就没有发言权,调查研究就像十月怀胎,解决问题就像一朝分娩。软件性能优化的第一步就是调查程序各个模块(或函数)的执行时间。
检验自己的代码是否高效。 美剧《犯罪心理》中常出现一个词:“profile”,意思是剖析犯罪份子的心理,这个词用在软件开发中,就叫软件性能剖析。性能剖析工具能分析出每个函数(有的工具能分析到每个循环)的执行时间。 我们在做软件开发时,可以使用的性能剖析软件有很多,例如IBM的Rational Quantify,Intel的VTune,AMD的CodeAnalyst,DSP的软件集成开发环境中也自带有这种工具。
Quantify
VTune
在没有工具时,我们也可以手工编写代码来实现profile的功能。处理器上都有计数器,每个时钟周期累加一次,操作系统会提供访问计数器的函数,通过在一段代码前后访问计数器,得到它们的差值,再配合处理器的工作频率,就可以知道这段代码执行的时间了。知道了各个模块的执行时间之后,就能优先优化占用时间长的模块。
光说不练假把式,真刀真枪真功夫,从下节开始,我们就来介绍怎么编写高效的代码。 |