i++;
++i;
i +=1;
i =i +1;
在C语言代码中我们经常看到这样的增值语句,那么到底哪个语句效率最高呢?
‘i++’表示取i的地址,把他装入寄存器当中然后增加内存中i的值。
'++i'表示增加i的内容把它的值放入寄存器中。
i +=1,i=i+1都是赋值操作。在早期编译器当中其被翻译成两条指令,因此大家会认为这样的效率底下。
但在现代编译器中gcc,vc等区别已然不存在,就是说以上几条语句代码速度 是一样的,因为编译器在为这几条语句生成中间代码时都进行了优化。
下面我们来看一下他们的汇编代码:
#include <iostream>
int main(int argc, const char * argv[])
{
int i=0;
//i++//
i++;
//++i//
++i;
/i+=1/
i+=1;
/i=i+1/
i=i+1;
return 0;
}
上面增值语句LLVM编译器生成的汇编代码是:
Ltmp5:
movl $0, -20(%rbp)
.loc 1 15 5
movl -20(%rbp), %edi
addl $1, %edi
movl %edi, -20(%rbp)
.loc 1 17 5
movl -20(%rbp), %edi
addl $1, %edi
movl %edi, -20(%rbp)
.loc 1 19 5
movl -20(%rbp), %edi
addl $1, %edi
movl %edi, -20(%rbp)
.loc 1 21 5
movl -20(%rbp), %edi
addl $1, %edi
movl %edi, -20(%rbp)
.loc 1 22 5