看了kaikai比较两者关系的帖子 , 我用文件转换方式查看了下编辑器是如果编译程序的 , 结果的确指针
比数组要快 。
将以下程序转换成汇编文件比较循环操作 , 发现指针的周期比数组少 , 所以指针速度更快
main ( )
{
int Array[10] ;
int *p;
int i;
for ( i = 0; i < 10;i++ )
Array[i] = 1;
for ( p = Array; p < Array + 10 ;p++ )
*p = 2;
}
ifndef ??version
?debug macro
endm
endif
?debug S "mmm.c"
_TEXT segment byte public 'CODE'
DGROUP group _DATA,_BSS
assume cs:_TEXT,ds:DGROUP,ss:DGROUP
_TEXT ends
_DATA segment word public 'DATA'
d@ label byte
d@w label word
_DATA ends
_BSS segment word public 'BSS'
b@ label byte
b@w label word
?debug C E9565D9131056D6D6D2E63
_BSS ends
_TEXT segment byte public 'CODE'
; ?debug L 1
_main proc near
push bp
mov bp,sp
sub sp,20
push si
push di
; ?debug L 7
;------------------------------------------------------------
;数组赋值的过程
xor di,di ;计数器清0
jmp short @5
@4:
; ?debug L 8
mov bx,di ;将计数器赋给bx
shl bx,1 ;偏移地址移动两位
lea ax,word ptr [bp-20] ;取得数组偏移地址
add bx,ax ;得到具体地址
mov word ptr [bx],1 ;赋值
@3:
inc di ;计数器加1
@5:
cmp di,10 ;判断是否小于10
jl @4
;--------------------------------------------------------------
@2:
; ?debug L 9
;--------------------------------------------------------------
;指针赋值过程
lea si,word ptr [bp-20] ;取得数组偏移地址
jmp short @9
@8:
; ?debug L 10
mov word ptr [si],2 ;给指针赋值
@7:
inc si
inc si
@9: ;判断是否小于数组最后地址
lea ax,word ptr [bp]
cmp ax,si
ja @8
;--------------------------------------------------------------
@6:
@1:
; ?debug L 11
pop di
pop si
mov sp,bp
pop bp
ret
_main endp
_TEXT ends
?debug C E9
_DATA segment word public 'DATA'
s@ label byte
_DATA ends
_TEXT segment byte public 'CODE'
_TEXT ends
public _main
end