私はこの段落がある本を読んでいました:
C の配列は、メモリの連続したチャンクと見なすことができます。より正確には、配列の最後の次元は連続部分です。これを行優先順序と呼びます。これと、キャッシュされていないデータにアクセスするときにキャッシュ フォールトが完全なキャッシュ ラインをキャッシュにロードして、後続のキャッシュ フォールトを防ぐという事実を理解すると、array[0][0] を使用して次元 10000x10000 の配列にアクセスすると、array[ がロードされる可能性がある理由がわかります。 0][1] はキャッシュ内にありますが、直後に array[1][0] にアクセスすると、2 つ目のキャッシュ フォールトが生成されます。これは、array[0][0] から sizeof(type)*10000 バイト離れているためです。同じキャッシュライン上。これが、このような反復が非効率的な理由です。
#define ARRLEN 10000
int array[ARRLEN][ARRLEN];
size_t i, j;
for (i = 0; i < ARRLEN; ++i)
{
for(j = 0; j < ARRLEN; ++j)
{
array[j][i] = 0;
}
}
彼らがこの段落で何を説明しようとしているのか、彼らが話している「キャッシュ障害」とは何なのかを説明してもらえますか?