在 Chito 开发者的一篇日志中,评论下面有人说传说中 ++i 比 i++ 的效率高,看 K&R 的书,上面的自增也是用 ++i,感觉有点好奇,就照葫芦画瓢,按这篇文章中的方法用 gcc 反了一下,却发现两者汇编代码一样……

test.c

#include <stdio.h>

int main(void)
{
	int i;
	
	i = 0;
	i++;

	return 0;
}

test2.c

#include <stdio.h>

int main(void)
{
	int i;
	
	i = 0;
	++i;

	return 0;
}

 

反后的汇编代码

test.s

.file	"test.c"
	.def	___main;	.scl	2;	.type	32;	.endef
	.text
.globl _main
	.def	_main;	.scl	2;	.type	32;	.endef
_main:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$8, %esp
	andl	$-16, %esp
	movl	$0, %eax
	addl	$15, %eax
	addl	$15, %eax
	shrl	$4, %eax
	sall	$4, %eax
	movl	%eax, -8(%ebp)
	movl	-8(%ebp), %eax
	call	__alloca
	call	___main
	movl	$0, -4(%ebp)
	leal	-4(%ebp), %eax
	incl	(%eax)
	movl	$0, %eax
	leave
	ret

 

test2.s

.file	"test.c"
	.def	___main;	.scl	2;	.type	32;	.endef
	.text
.globl _main
	.def	_main;	.scl	2;	.type	32;	.endef
_main:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$8, %esp
	andl	$-16, %esp
	movl	$0, %eax
	addl	$15, %eax
	addl	$15, %eax
	shrl	$4, %eax
	sall	$4, %eax
	movl	%eax, -8(%ebp)
	movl	-8(%ebp), %eax
	call	__alloca
	call	___main
	movl	$0, -4(%ebp)
	leal	-4(%ebp), %eax
	incl	(%eax)
	movl	$0, %eax
	leave
	ret

具体如上了,比较了一下两者,是一样的,难道传说中的 ++i 比 i++ 效率高是假的? ==!!

我的水平很菜,若是有地方错了,欢迎各位指出。