啦啦啦~~~
分类: C/C++
2011-09-08 23:16:07
GFree_Wind2011-09-09 23:17:10
GFree_Wind2011-09-09 14:01:45
GFree_Wind2011-09-09 11:52:57
Rainyzzj2011-09-09 01:18:22
关于汇编,我也算是忘记的差不多了,根据你的结论,我仔细的比较了一下循环中的汇编代码,发现,基本操作都是一样的。仔细对比操作数的时候,我发现这两行的差别。
0x080483b0 <+28>: addl $0x1,-0x8(%ebp)
0x080483ed <+44>: add -0xc(%ebp),%eax
我不清楚addl是不是表示低位相加的意思,姑且看做和add是一样的。
对比两个操作数,发现addl的第一个操作数($0x1)用的是立即数
而add的第一个操作数-0xc(%ebp),我查了一下,ebp应该是个基址指针,也就是说需要访问内存,而且既然是个基址指针,肯定还会有偏移量。也就是需要访问两次内存(应该是两次吧,记不清了,至少一次。)访问内存和立即数比起来,肯定慢多了。
另外,如果addl是低地址相加,位数上会比所有位相加,来的少,效率上也会高一点。这一点我只是猜测,不能确定。
我的个人理解。你看看我说的对不对。不对的地方请指正。