【发布时间】:2023-03-08 02:19:01
【问题描述】:
一些 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 运行这两个程序时,第二个程序需要更多时间。这意味着使用指针比使用数组索引方法花费更多时间。
你能用这些简单的程序向我解释一下这是如何工作的吗?
【问题讨论】:
-
这不是他们所说的指针访问的意思。关于时间安排,有这么几个项目你没有提到你占了(调试与发布,反编译的 asm 分析)。如果基准测试像
time流程监控器一样简单,我们都会成为高薪的统计学家。 -
我认为你的意思是:stackoverflow.com/q/26241007/2455888
-
在使用
gcc.objdump -D a.out > file编译时为这两个程序添加“-g”标志。请记住为每个程序创建两个不同的文件。现在做 vimdiff file1 file2。比较差异,但我认为不会有任何差异。