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
++中,元素以行优先顺序存储。因此,第一只落实有更好的长空局部性(附近的存储器位置于接连迭代中被引用)。因此,第一单实现应先行用于迭代多维数组。