小编典典

C 中的 i++ 和 ++i 之间是否存在性能差异?

all

如果不使用结果值i++,是否存在性能差异?++i


阅读 98

收藏
2022-03-11

共1个答案

小编典典

执行摘要:没有。

i++可能会比 慢,因为 可能需要保存++i的旧值以供以后使用,但实际上所有现代编译器都会对此进行优化。i

我们可以通过查看这个函数的代码来证明这一点,包括++ii++

$ cat i++.c
extern void g(int i);
void f()
{
    int i;

    for (i = 0; i < 100; i++)
        g(i);

}

这些文件是相同的,除了++ii++

$ diff i++.c ++i.c
6c6
<     for (i = 0; i < 100; i++)
---
>     for (i = 0; i < 100; ++i)

我们将编译它们,并获得生成的汇编器:

$ gcc -c i++.c ++i.c
$ gcc -S i++.c ++i.c

我们可以看到生成的目标文件和汇编文件都是一样的。

$ md5 i++.s ++i.s
MD5 (i++.s) = 90f620dda862cd0205cd5db1f2c8c06e
MD5 (++i.s) = 90f620dda862cd0205cd5db1f2c8c06e

$ md5 *.o
MD5 (++i.o) = dd3ef1408d3a9e4287facccec53f7d22
MD5 (i++.o) = dd3ef1408d3a9e4287facccec53f7d22
2022-03-11