一些C书作者说,通过指针访问数组值比通过数组索引更快。但这是真的吗? 这里有两个程序,我写了理解这个概念。是指针访问方法比数组索引更快吗?
main()
{
int arr[100000],*ptr,c,i;
ptr=arr;
for(i=0;i<100000;i++)
arr[i]=i;
for(i=0;i<100000;i++)
c = arr[i];
}
main()
{
int arr[100000],*ptr,c,i;
ptr=arr;
for(i=0;i<100000;i++)
*(ptr+i)=i;
for(i=0;i<100000;i++)
c = *(ptr+i);
}
当我用time ./a.out
运行这两个程序时,第二个程序需要更多时间。这意味着使用指针需要比数组索引方法更多的时间。 能否请您向我解释这是如何工作的,这些简单的程序?
这不是他们指针访问的含义。关于时间安排,有几个项目你没有提及你占的比例(debug vs release,反编译的asm分析)。如果基准测试像“时间”流程监控一样简单,那么我们都是过多的统计人员。 – WhozCraig 2014-10-08 07:41:07
我认为你的意思是这样的:http://stackoverflow.com/q/26241007/2455888 – haccks 2014-10-08 07:45:10
用'gcc'.'objdump -D a.out> file'编译时添加'-g''标志,节目。请记住为每个程序创建两个不同的文件。现在做vimdiff file1 file2。比较差异,但我认为不会有任何区别。 – 2014-10-08 07:46:35