- 论坛徽章:
- 0
|
原帖由 c_bee 于 2008-8-1 00:57 发表 ![]()
其实...哪个效率高我知道
但我想知道的是
怎么从底层来解释其效率之所以高,因为我得到的答案自己理解不通,解释不了
我的系统不方便
lz可以gcc -S
然后去数汇编指令
查intel开发手册加时钟周期
这个应该不难
这个够底层了吧。。。
我用mingw看了下 你的代码是:
.file "effi.c"
.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC0:
.ascii "1234567890\0"
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
subl $72, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
movl %eax, -60(%ebp)
movl -60(%ebp), %eax
call __alloca
call ___main
movb $1, -9(%ebp) // -9(%ebp) : a
movl LC0, %eax
movl %eax, -40(%ebp) // -40(%ebp) : char c[] : c[0]
movl LC0+4, %eax //
movl %eax, -36(%ebp) // c[1]
movzwl LC0+8, %eax
movw %ax, -32(%ebp)
movzbl LC0+10, %eax
movb %al, -30(%ebp) // c[9]
movl $LC0, -44(%ebp)
movzbl -39(%ebp), %eax //
movb %al, -9(%ebp) // a = c[1];
movl -44(%ebp), %eax // &p[0];
incl %eax // &p[1];
movzbl (%eax), %eax
movb %al, -9(%ebp) // a = p[1];
movl $0, %eax
leave
ret
==============================
我加了些简单的注释
lz自己看看吧
数组的初始化进行了全数据拷贝
而指针的初始化没有只通过首地址加偏移寻址
[ 本帖最后由 blizzard213 于 2008-8-1 01:31 编辑 ] |
|