gpt4 book ai didi

c - 指针和数组之间的效率(更少的汇编指令不会花费更少的时间)

转载 作者:太空狗 更新时间:2023-10-29 17:25:46 25 4
gpt4 key购买 nike

<分区>

有人说:“任何可以通过数组下标实现的操作也可以用指针来完成。指针版本通常会更快”。

我对上面的结果表示怀疑,所以我做了如下测试:

在下面的文章中,我们不关心编译器优化。关于编译器优化如何影响指针和数组之间的效率,请注意:Efficiency: arrays vs pointers

(Visual Studio 2010, Debug模式,无优化)

#include <windows.h>
#include <stdio.h>

int main()
{
int a[] = {10,20,30};
int* ap = a;

long counter;

int start_time, end_time;
int index;

start_time = GetTickCount();
for (counter = 1000000000L; counter>0; counter--)
{
*(ap+1) = 100;
}
end_time = GetTickCount();
printf("10 billion times of *ap = %d\n", end_time-start_time);

start_time = GetTickCount();
for (counter = 1000000000L; counter>0; counter--)
{
a[1] = 101;
}
end_time = GetTickCount();
printf("10 billion times of a[0] = %d\n", end_time-start_time);

return 0;
}

结果是:

10 billion times of *ap = 3276
10 billion times of a[0] = 3541

指针好像有点快。但是对比了拆机后,我陷入了更深的迷茫。

(Visual Studio 2010, Debug模式,无优化)

; 17   :         *(ap+1) = 100;
mov eax, DWORD PTR _ap$[ebp]
mov DWORD PTR [eax+4], 100 ; 00000064H

; 25 : a[1] = 101;
mov DWORD PTR _a$[ebp+4], 101 ; 00000065H

从汇编输出来看,通过指针访问内存需要 2 条指令,而数组只需要 1 条指令。

为什么数组执行的指令较少,但花费的时间并不比指针少?

是否与cpu缓存有关?如何修改我的测试代码来证明它?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com