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