int (*a)[1000] = malloc(sizeof(int) * 1000 * 1000);
としたとき

for (i = 0; i < 1000; ++i)
for (j = 0; j < 1000; ++j)
a[i][j] = i * j;

より

for (i = 0; i < 1000; ++i)
for (j = 0; j < 1000; ++j)
a[j][i] = i * j;

のほうが遅いらしいんですがなんでですか?