个人对网上流传已久的《提高C语言效率》的质疑

来源:互联网 发布:sql exists什么作用 编辑:程序博客网 时间:2024/05/03 07:25

人对网上流传已久的《提高C语言效率》的质疑

 

系统平台:windowns XP

测试软件:keil 4

优化等级:默认的8 level

测试方法:反汇编

测试时间:2011·10·26(这个是以前写的了~)

 

小鸟刚学C语言时就只知道拖着老鸟的大腿走,大侠说什么,偶们就做什么,从来不想为什么,从来不怀疑(-_-)。时隔几年之后,恍然大悟,原来老鸟也是拖着老老鸟的腿走+_+)。今日偶然间看见陈旧的文档《提高C语言效率》,突然脑子一热:咋就成了高效(搞笑)了呢?郁闷3秒钟之后,瞬间打开keil4(PS:为什么打开keil 4? 习惯而已)。

哒哒哒,搞了几行代码(⊙o⊙)。

 

质yi疑一:    使用for循环时,用i--比用i++效率高。

测试源码:

/*这两个for语句的功能一样*/

#include <stdio.h>

int main()

{

          unsignedchar a = 0,i = 0;

      while(1)

      {

                   for(i=0;i<3;i++)

                   {

                            a++;

                   }

 

                   for(i=3;i>0;i--)

                   {

                            a++;

                   }

         }

         return0;

}

 

测试结果:

                   如图1所示,看见了吗,前一个for使用i++,反汇编出5条指令,而后一个for使用i--却反汇编出8条指令!!!(PS:改变优化等级后,虽然会影响反汇编结果,但是也没出现使用i--比i++好的情况~,增加循环次数也未改变这个question~)

疑问:难道是蒙人的?还是咋的?

 

图1

质疑二:做乘除法运算时,用 移位 代替 乘除运算符。

测试源码:(懒一下!(*^__^*) ~)

测试结果:

(PS:只测试了 乘法~~~黑嘿T^T)

结果令人很意外。只能说keil太神奇了,不同的数据,有不同的结果(一会高,一会低,哎~),让偶摸不着头脑~~部分结果如图2、图3所示。


图2




图3


厄,还有其它测试,偶就不做了,感兴趣的童鞋可以自己哒哒哒,偶也(⊙o⊙)。

总结,虽然是质疑,但是偶还是相信:存在就是有道理的~!(不确定因素还是很多D,比如说:编译器类型,编译器版本,优化设置等)。=_=,好了,就到这里咯,欲知以后情节,请听下回哒哒哒(~ o ~)

原创粉丝点击