C语言不同增值语句区别

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                 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值