源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 614|回复: 10

[相关技巧] i++循环与i-–循环的执行效率(递增与递减效率)

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2011-1-5 23:44:05 | 显示全部楼层 |阅读模式
i++循环与i-–循环的执行效率(递增与递减效率),需要的朋友可以参考下。 昨天同事问了我一个问题,有两个循环语句:
复制代码 代码如下:
for(i = n; i > 0; i--)
{

}

for(i = 0; i < n; i++)
{

}

为什么前者比后者快?
我当时的解释是:
i- -操作本身会影响CPSR(当前程序状态寄存器),CPSR常见的标志有N(结果为负), Z(结果为0),C(有进位),O(有溢出)。i > 0,可以直接通过Z标志判断出来。
i++操作也会影响CPSR(当前程序状态寄存器),但只影响O(有溢出)标志,这对于i < n的判断没有任何帮助。所以还需要一条额外的比较指令,也就是说每个循环要多执行一条指令。
(这是五年前tjww告诉我的,当时他在AVR上写一个LCD驱动程序,使用后者LCD会闪烁,使用前者则没有问题。)
为了确认我的理解是正确的,做了个实验:
复制代码 代码如下:
int loop_dec(int n)
{
int i = 0;
int v = 0;

for(i = n; i > 0; i--)
v +=i;

return v;
}

int loop_inc(int n)
{
int i = 0;
int v = 0;

for(i = 0; i < n; i++)
v +=i;

return v;
}

用arm-linux-gcc编译,然后反汇编:
i--的循环条件:
4c: e51b3014 ldr r3, [fp, #-20]
50: e3530000 cmp r3, #0 ; 0x0
54: cafffff5 bgt 30 <loop_dec+0x30>

i++的循环条件:
b8: e51b3018 ldr r3, [fp, #-24]
bc: e1520003 cmp r2, r3
c0: bafffff4 blt 98 <loop_inc+0x30>结果和我想象的并不一样,这是怎么回事呢?我想可能因为没有加优化选项,于是加上-O选项,结果变为:
i--的循环条件:
14: e2500001 subs r0, r0, #1 ; 0x1
18: 1afffffc bne 10 <loop_dec+0x10>

i++的循环条件:
3c: e2833001 add r3, r3, #1 ; 0x1
40: e1500003 cmp r0, r3
44: 1afffffb bne 38 <loop_inc+0x14>这下没错了,果然少一个cmp指令。
文章出处:http://www.limodev.cn/blog
回复

使用道具 举报

2

主题

1万

回帖

99

积分

注册会员

Rank: 2

积分
99
发表于 2022-9-5 17:26:04 | 显示全部楼层
撒旦撒旦撒擦擦擦擦
回复 支持 反对

使用道具 举报

27

主题

1万

回帖

331

积分

中级会员

Rank: 3Rank: 3

积分
331
发表于 2023-2-8 14:34:46 | 显示全部楼层
加快速度很快就撒谎
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-11-29 02:21:09 | 显示全部楼层
的谁vdvdsvdsvdsdsv
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

61

积分

注册会员

Rank: 2

积分
61
发表于 2023-12-11 17:13:04 | 显示全部楼层
哟哟哟哟哟以偶
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2024-2-11 22:39:33 | 显示全部楼层
啊,数码撒飒飒飒飒
回复 支持 反对

使用道具 举报

14

主题

1万

回帖

75

积分

注册会员

Rank: 2

积分
75
发表于 2024-3-2 06:57:00 | 显示全部楼层
额头额定法国队是范德萨
回复 支持 反对

使用道具 举报

2

主题

1万

回帖

499

积分

中级会员

Rank: 3Rank: 3

积分
499
发表于 2024-6-9 20:25:55 | 显示全部楼层
强烈支持楼主ing……
回复 支持 反对

使用道具 举报

3

主题

1万

回帖

172

积分

注册会员

Rank: 2

积分
172
发表于 2024-8-10 00:42:53 | 显示全部楼层
问问问企鹅哇哇哇哇哇
回复 支持 反对

使用道具 举报

4

主题

1万

回帖

60

积分

注册会员

Rank: 2

积分
60
发表于 2024-9-2 00:01:52 | 显示全部楼层
来看看怎么样
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2024-9-20 22:53 , Processed in 0.149219 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表