您的位置:首页 > 其它

n++ / ++n / n+=1 / n=n+1 实际效率比较

2009-06-13 18:05 169 查看
程序员面试宝典》上说n++高过n=n+1,貌似有道理。但效率不是你我说了算,而应该由编译器说了算。

测试源代码如下:

int main(void)
{
int n = 20;
n++;
++n;
n=n+1;
n+=1;

return 0;
}

VC++6.0的汇编代码如下:

9: int n = 10;
0040D781 mov dword ptr [ebp-1Ch],0Ah
10: ++n;
0040D788 mov ecx,dword ptr [ebp-1Ch]
0040D78B add ecx,1
0040D78E mov dword ptr [ebp-1Ch],ecx
11: n++;
0040D791 mov edx,dword ptr [ebp-1Ch]
0040D794 add edx,1
0040D797 mov dword ptr [ebp-1Ch],edx
12: n += 1;
0040D79A mov eax,dword ptr [ebp-1Ch]
0040D79D add eax,1
0040D7A0 mov dword ptr [ebp-1Ch],eax
13: n = n + 1;
0040D7A3 mov ecx,dword ptr [ebp-1Ch]
0040D7A6 add ecx,1
0040D7A9 mov dword ptr [ebp-1Ch],ecx
DEV-C++汇编代码如下:

movl $20, -4(%ebp)
leal -4(%ebp), %eax
incl (%eax)
leal -4(%ebp), %eax
incl (%eax)
leal -4(%ebp), %eax
incl (%eax)
leal -4(%ebp), %eax

现象:2个编译器对四条语句的汇编都是一样的,区别在于VC6用了3条汇编语句,而G++用了2条。

结论:

四条语句在某个具体的编译器环境中的实际效率是一样的,但不同的编译器实现又会有不同,如G++的效率,至少在这条语句的汇编上可以看出,比V6的高一点。

注:关于这个现象在《C专家编程》的P276页也有说明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: