Почему порядок циклов влияет на производительность при переборе 2D-массива?

Ниже приведены две программы, которые почти идентичны, за исключением того, что я поменял местами переменные iи j. Оба они работают в разное время. Может ли кто-нибудь объяснить, почему это происходит?

Версия 1

#include <stdio.h>
#include <stdlib.h>

main () {
  int i,j;
  static int x[4000][4000];
  for (i = 0; i < 4000; i++) {
    for (j = 0; j < 4000; j++) {
      x[j][i] = i + j; }
  }
}

Версия 2

#include <stdio.h>
#include <stdlib.h>

main () {
  int i,j;
  static int x[4000][4000];
  for (j = 0; j < 4000; j++) {
     for (i = 0; i < 4000; i++) {
       x[j][i] = i + j; }
   }
}
350
задан Lundin 7 March 2019 в 22:36
поделиться