内存访问比较

Utk*_*rsh 5 c++ memory arrays

2中哪一个更快(C++)?

for(i=0; i<n; i++)
{
    sum_a = sum_a + a[i];
    sum_b = sum_b + b[i];
}
Run Code Online (Sandbox Code Playgroud)

要么

for(i=0; i<n; i++)
{
    sum_a = sum_a + a[i];
}
for(i=0; i<n; i++)
{
    sum_b = sum_b + b[i];
}
Run Code Online (Sandbox Code Playgroud)

我是初学者,所以我不知道这是否有意义,但在第一个版本中,数组'a'被访问,然后是'b',这可能导致许多内存开关,因为数组'a'和'b'在不同的记忆位置.但是在第二个版本中,首先访问整个数组'a',然后访问整个数组'b',这意味着访问连续的内存位置而不是在两个数组之间交替.

这两个版本的执行时间(即使是非常微不足道的版本)之间有什么不同吗?

Mac*_*nda 4

我认为这个问题没有正确的答案。一般来说,第二个版本的迭代次数是其两倍(CPU 执行开销),但对内存的访问更差(内存访问开销)。现在想象一下,您在时钟较慢但缓存非常好的 PC 上运行此代码。内存开销减少了,但由于时钟速度较慢,运行同一循环两次会使执行时间更长。换句话说:时钟快,但内存差 - 运行两个循环不是问题,因此最好针对内存访问进行优化。

这是有关如何分析应用程序的很酷的示例:链接