2

重複の可能性:
行列の要素への行方向と列方向のアクセス

C ++では、次のような多次元配列を反復処理する方が効率的であるのはなぜですか。

// Iterate through the highest dimention last (k)
int num[10][10][10];

for(int i = 0; i < 10; ++i)
{
    for(int j = 0; j < 10; ++j)
    {
        for(int k = 0; k < 10; ++k)
        {
            cout << num[i][j][k];
        }
    }
}

このようより:

// iterate through the highest dimension first (k)
int num[10][10][10];

for(int k = 0; k < 10; ++k)
{
    for(int j = 0; j < 10; ++j)
    {
        for(int i = 0; i < 10; ++i)
        {
            cout << num[i][j][k];
        }
    }
}
4

1 に答える 1

2

これは、プロセッサがデータをキャッシュし、配列のようなint array[n][m][k]ものがメモリで表されるため、最初に要素があるarray[0][0][0]ためarray[0][0][k - 1]です。したがって、最初の例のように反復すると、プロセッサはメモリ全体をキャッシュにロードできますが、2 番目の例では、プロセッサはメモリを「介して」コピーできません。

于 2012-06-15T13:43:24.193 に答える