QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1653|回复: 11

++i和i++

[复制链接]
发表于 2004-9-19 09:57:32 | 显示全部楼层 |阅读模式
我曾经在一本书上看到,在单独用 i++ 或者 ++i 的时候,++i 比 i++的执行效率高一些。我想了半天,还是搞不明白。我看linux内核也都用的是i++,所以我就怀疑这个说法了。
有谁知道吗?是不是真的高一些啊?请详细的讲解一下,谢谢!
发表于 2004-9-19 10:35:25 | 显示全部楼层
回复

使用道具 举报

发表于 2004-9-19 11:20:22 | 显示全部楼层
你的那本书是讲C++的吧

我记得C++里面,如果你重载了++运算符,后置++是通过前置++实现的
回复

使用道具 举报

发表于 2004-9-19 11:24:45 | 显示全部楼层
have nothing to do with kernel
回复

使用道具 举报

 楼主| 发表于 2004-9-20 11:42:27 | 显示全部楼层
是讲 c++ 的!
我昨天又看了一遍,似乎明白了一点。当初没有看那么细。

不过如果是基本的数据类型,如整形,是不是经过编译后就是一样的了?
回复

使用道具 举报

发表于 2004-9-23 20:18:42 | 显示全部楼层
a=++i表示先做++运算,然后做赋值给a.
a=i++表示在赋值后做+=运算
回复

使用道具 举报

发表于 2004-9-24 08:52:11 | 显示全部楼层
应该是一样的。

为什么++会单独成为一条指令呢?原理上它和i=i+1是一样的。因为例如intel cpu上有专门的inc 这条指令,就是自加一指令,它比普通的add指令要快。我想大部分cpu也有这条指令,所以,经过编译后,都应该变成inc指令,所以我认为不会有性能区别。
回复

使用道具 举报

发表于 2004-9-24 15:05:51 | 显示全部楼层
不知道,猜想:[code:1]
int i_inc(int i)
{
    int j;

    j = i;
    i = i + 1;

    return j;
}

int inc_i(int i)
{
    i = i + 1;

    return i;
}[/code:1]

具体得看汇编。
回复

使用道具 举报

发表于 2004-10-2 00:48:56 | 显示全部楼层
这个和编译器有关吧
回复

使用道具 举报

发表于 2004-11-29 10:09:36 | 显示全部楼层
看汇编代码吧
好象i++和++i单独成一条语句是没什么区别
int main()
{
int i;
i++;
++i;
}

        .file        "u.c"
        .def        ___main;        .scl        2;        .type        32;        .endef
        .text
.globl _main
        .def        _main;        .scl        2;        .type        32;        .endef
_main:
        pushl        %ebp
        movl        %esp, %ebp
        subl        $8, %esp
        andl        $-16, %esp
        movl        $0, %eax
        movl        %eax, -8(%ebp)
        movl        -8(%ebp), %eax
        call        __alloca
        call        ___main
        leal        -4(%ebp), %eax
        incl        (%eax)
        leal        -4(%ebp), %eax
        incl        (%eax)
        leave
        ret
回复

使用道具 举报

发表于 2004-12-2 10:35:29 | 显示全部楼层
如果i是整数当然没多少差别,但是如果i是一个很庞大的对象,那么++i好象会先返回一个临时的对象然后再执行++操作,这样的开销差别就会比较明显,好象是这样的……
回复

使用道具 举报

发表于 2004-12-11 21:20:25 | 显示全部楼层
怎么还有这种说法呢?它们是代表不同的意思啊,就是有效率的问题也不能混淆的啊,更何况是否存在效率问题还有待考证,反正我是不同意这样的说法,也没有为什么,只是靠编程的经验
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 09:46 , Processed in 0.043022 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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