看如下代码,访问c,和p的数据,哪一个更快,还是一样?
void main()
{
char a = 1;
char c[] = "1234567890";
char *p ="1234567890";
a = c[1];
a = p[1];
return;
}
这还有区别?有也,我也是看了别人的分析,才明白。
c为数组,指向栈内存, p为指针,指向堆内存
赋值方式不同:
11: char c[] = "1234567890";汇编代码如下:
0040D6C9 mov eax,[string "1234567890" (00422fb4)]
0040D6CE mov dword ptr [ebp-10h],eax
0040D6D1 mov ecx,dword ptr [string "1234567890"+4 (00422fb8)]
0040D6D7 mov dword ptr [ebp-0Ch],ecx
0040D6DA mov dx,word ptr [string "1234567890"+8 (00422fbc)]
0040D6E1 mov word ptr [ebp-8],dx
0040D6E5 mov al,[string "1234567890"+0Ah (00422fbe)]
0040D6EA mov byte ptr [ebp-6],al
12: char *p ="1234567890";汇编代码如下:
0040D6ED mov dword ptr [ebp-14h],offset string "1234567890" (00422fb4)
访问方式如下:
13: a = c[1];0040D6F4 mov cl,byte ptr [ebp-0Fh]
0040D6F7 mov byte ptr [ebp-4],cl
14: a = p[1];
0040D6FA mov edx,dword ptr [ebp-14h]
0040D6FD mov al,byte ptr [edx+1]
0040D700 mov byte ptr [ebp-4],al
可见数组访问更快呀!