C语言巡回质量(缓存难点)

C语言,设想上边八个C语言函数来测算2D数组中的元素的总数。忽略编译器优化,哪七个更好地落到实处总和?

// Function 1
int fun1(int arr[R][C])
{
    int sum = 0;
    for (int i=0; i<R; i++)
      for (int j=0; j<C; j++)
          sum += arr[i][j];
}

// Function 2
int fun2(int arr[R][C])
{
    int sum = 0;
    for (int j=0; j<C; j++)
      for (int i=0; i<R; i++)
          sum += arr[i][j];
}

  在C / C
++中,元素以行优先顺序存储。由此,首个达成所有更好的空中局地性(附近的存储器地点在接连迭代中被引用)。由此,第二个落到实处应优先用于迭代多维数组。