人对网上流传已久的《提高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 ~)