i++和++i
2010年9月30日 11:20
在 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++ 效率高是假的? ==!!
我的水平很菜,若是有地方错了,欢迎各位指出。