| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2069 人关注过本帖
标题:i++ 和 ++i 那个效率更高
只看楼主 加入收藏
degang111
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-4-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:15 
i++ 和 ++i 那个效率更高
求教 求教
搜索更多相关主题的帖子: 效率 
2010-04-18 11:25
chen_leave
Rank: 2
等 级:论坛游民
帖 子:21
专家分:37
注 册:2010-4-1
收藏
得分:1 
这都要讨论??现在是什么电脑。。。还在意这点吗。。。i++ 和 ++i 。。。。严格说++i效率高。。。

我选择在不曾相识也许永不相识的人群里停留栖息,安享一份恬静的温柔
2010-04-18 11:34
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:1 
如果在C++里面用到迭代器做控制变量的话
那么就要注意能用++iter的地方就别用iter++了


[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2010-04-19 10:49
败给网络
Rank: 2
等 级:论坛游民
帖 子:45
专家分:63
注 册:2010-1-7
收藏
得分:1 
为什么事++i效率高呢··??????
2010-04-19 10:59
xiaoxinwan
Rank: 2
等 级:论坛游民
帖 子:52
专家分:91
注 册:2010-4-6
收藏
得分:1 
我也在期待答案
2010-04-19 11:13
itma
Rank: 4
等 级:业余侠客
帖 子:105
专家分:266
注 册:2010-2-8
收藏
得分:1 
这个现在还考虑啊。。。。如果真要说的话
++i效率要稍高一点。。。。。。
原因是i++是用++i实现的。。。i++运算时候会有一个临时变量。。。
2010-04-20 18:36
qiaoge
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2010-4-20
收藏
得分:1 
都一样吧
2010-04-20 22:34
狮子王
Rank: 1
等 级:新手上路
帖 子:13
专家分:7
注 册:2010-4-14
收藏
得分:1 
回复 6楼 itma
原来如此啊!学习了!
2010-04-20 22:59
林语
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:98
专家分:184
注 册:2009-8-29
收藏
得分:1 
真强悍,学习了。
我们就应该具有这种刻苦钻研的精神!
2010-04-21 09:10
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:1 
以前还真不知道,特地google和自己实现了下:

我不懂汇编...只看下它们是不是具有相同的指令

由于我电脑上没有,所以 vc下请看:http://

gcc/g++中

对于两个程序:
程序一:
int main()
{
   int i=0;
   int x=0;
   x=i++;
}
程序2:
int main()
{
   int i=0;
   int x=0;
   x=++i;
}
采用默认优化规则,
程序一汇编代码为:
    pushl    %ebp
    movl    %esp, %ebp
    subl    $24, %esp
    andl    $-16, %esp
    movl    $0, %eax
    addl    $15, %eax
    addl    $15, %eax
    shrl    $4, %eax
    sall    $4, %eax
    movl    %eax, -12(%ebp)
    movl    -12(%ebp), %eax
    call    __alloca
    call    ___main
    movl    $0, -4(%ebp)
    movl    $0, -8(%ebp)
    movl    -4(%ebp), %edx
    leal    -4(%ebp), %eax
    incl    (%eax)
    movl    %edx, -8(%ebp)
    movl    $0, %eax
    leave
    ret

程序二汇编代码为:
    pushl    %ebp
    movl    %esp, %ebp
    subl    $24, %esp
    andl    $-16, %esp
    movl    $0, %eax
    addl    $15, %eax
    addl    $15, %eax
    shrl    $4, %eax
    sall    $4, %eax
    movl    %eax, -12(%ebp)
    movl    -12(%ebp), %eax
    call    __alloca
    call    ___main
    movl    $0, -4(%ebp)
    movl    $0, -8(%ebp)
    leal    -4(%ebp), %eax
    incl    (%eax)
    movl    -4(%ebp), %eax
    movl    %eax, -8(%ebp)
    movl    $0, %eax
    leave
    ret
可以看到:i++和++i效率一样,只是汇编执行顺序(+1的先后)有差别。

而经过g++最高优化(-O3选项):
程序一汇编代码为:
    pushl    %ebp
    movl    $16, %eax
    movl    %esp, %ebp
    subl    $8, %esp
    andl    $-16, %esp
    call    __alloca
    call    ___main
    leave
    xorl    %eax, %eax
    ret
程序二汇编代码为:
    pushl    %ebp
    movl    $16, %eax
    movl    %esp, %ebp
    subl    $8, %esp
    andl    $-16, %esp
    call    __alloca
    call    ___main
    leave
    xorl    %eax, %eax
    ret
两者居然一样....(不懂汇编指令,应该有点差异才对...两者的最终x值不一样嘛)

综上:在内置的类型中,i++和++i效率是一样的(通过vc和gcc/g++得到的汇编指令得到证实)
其它自定义类型,据说 ++i 效率高一点,但没证实....
所以一般情况下,我们应该不用在意i++和++i的效率区别

人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-04-21 10:16
快速回复:i++ 和 ++i 那个效率更高
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.050540 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved