减少循环中的内存访问(C)

Pou*_*uya 1 c

我有一个关于减少循环中内存调用次数的问题.考虑以下代码(这不是我的代码,因为它太长了,因为我不能在这里代表它):

for(k=0;k<n;k++)
{
    y[k] = x[0]*2 + z[1];
}
Run Code Online (Sandbox Code Playgroud)

如您所见,在每次迭代中,都会调用内存中的相同块(x [0],z [1]).我想知道在多次调用相同内存块时是否有任何方法可以减少内存访问.提前致谢.

Alo*_*ave 6

简单地说,在循环之前获取值:

i = x[0];
j = z[1];
for(k=0;k<n;k++)
{
    y[k] = i*2 + j;
}
Run Code Online (Sandbox Code Playgroud)

当然,即使你没有改变任何东西,编译器也会优化它(如果可以的话),但它有助于编写更易读和更直观的代码.您不需要在每次迭代时获取值,并且您编写的代码应该表明这一点.
忘记微优化编写更直观和可读的代码!

正如在评论中正确指出的那样,右手表达式完全独立于循环,因此:

i = x[0]*2 + z[1];
for(k=0;k<n;k++)
{
    y[k] = i;
}
Run Code Online (Sandbox Code Playgroud)