程序优化的内容和原则

程序优化的内容和原则

对程序的优化,通常是指优化程序代码或程序执行速度。优化代码和优化速度实际上是一个矛盾的统一,一般是优化了代码的尺寸,就会带来执行时间的增加,如果优化程序的执行速度,通常会带来增加代码的副作用,很难鱼与熊掌兼得,只能在设计时掌握一个平衡点。

如果我们确实需要对某些代码进行实质性的优化,那么首先要清楚哪一部分代码的执行最浪费时间。往往最浪费时间的代码很少,大部分是大量的循环最占用时间。

优化的级别常分为三类:算法级优化;语言级优化;指令级优化。

体现一个程序员水平最重要的地方就是算法。一个好的算法使用非常少的代码就能实现原来很复杂的操作,但这是很难做到的。尤其是这些算法经常与负载的善有关,所以需要比较和测试才能有好的效果。

语言级优化就是采用较少的程序语言代码来代替冗长的代码块,例如,把某些赋值语句放到多循环的外面、使用inline函数、使用指针、用引用代替结构赋值、使用指针的移动代替内存拷贝、把初始化操作放在一开始而不是循环中间,等等。它所遵循的原则是“无代码”原则,减少需要执行的语句是提高速度的最直接的做法。这样的程序比较简捷,运行效果也比较稳定。

指令级优化则要深入得多,这里所用的语言一般是汇编语言。这种方法的调试和测试比较复杂,程序不太容易懂,也更容易出错,结果有时与硬件有关。这种方法所针对的代码数量应该比较少,仅是关键的部分。这样的优化是以指令周期作为单位的。

优化的内容一般有:

代码替换

使用周期短的指令代替周期长的指令。如,使用左移指令代替乘数是2的倍数的乘法;使用倒数指令代替除法指令。

减少分支预测

这是Pentium以上CPU特有的功能,它会执行该指令前预读一些指令,但是如果有分支就会造成预读的失效。

并行指令

这是Pentium以上CPU特有的多流水线的优势,两条(或多条,在Pentium  Pro以上)参数无关的指令可以被并行执行。

MMX指令

在处理大量字节型数据时可以用到它,一次可以处理8个字节的数据。

指令的预读

在读取大量数据时,如果该数据不在缓存里,将会浪费很多时间,因此需要提前把数据放在缓存中。这个功能在Pentium II的下一代CPU中出现。

优化原则有以下3条:

等价原则:经过优化后不应改变程序运行的功能。

有效原则:使优化后所产生的目标代码运行时间确实较短,占用的空间确实较小。

合算原则:应尽可能以较低的代价取得较好的优化效果,应当为值得优化的程序进行优化。

 

你可能感兴趣的:(汇编技术)