在C中,i++和++i之间有性能差异吗?

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

执行摘要:没有

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

我们可以通过查看此函数的代码来演示这一点,
同时使用++ii++

$cat i++.c
外部无效g(内部i);
void f()
{
int i;
对于(i=0;i<100;i++)
g(i);
}

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

$diff i++.c++i.c
6c6
<对于(i=0;i<100;i++)
---
&燃气轮机;对于(i=0;i<100;++i)

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

$gcc-ci++.c++i.c
$gcc-si++.c++i.c

我们可以看到生成的对象和汇编程序文件都是相同的

$md5 i++.s++i.s
MD5(i++.s)=90f620dda862cd0205cd5db1f2c8c06e
MD5(++i.s)=90f620dda862cd0205cd5db1f2c8c06e
$md5*.o
MD5(++i.o)=DD3EF1408D3A9E4287 FACCEC53F7D22
MD5(i++.o)=DD3EF1408D3A9E4287 FACCEC53F7D22

发表评论