0

たとえば、次のコードは 1000000 ベクトルを作成し、それぞれの長さは 10 です。

その後、ベクトルを数回連続してスキャンする場合があります。第 2 層のベクトルが連続した空間に割り当てられている場合 (キャッシュ ブロックに収まる第 2 層のベクトルはほとんどない可能性があります)、次のアクセスは効率的です。しかし、第 2 層のベクトルが別の場所に割り当てられている場合、内側のループを出るたびにデータを取得するためにランダムな場所にジャンプする可能性があり、効率的ではありません。

vector<vector<int > > a(1000000 , vector<int>(10))

for (int i = 0; i < a.size(); i++)
{
     for (int j = 0; j< a[i].size() ; j++) {
         a[i][j]++;
     }
}

さらに、最初に 2 層目のベクトルが連続した空間に配置されている場合。要素をベクターに push_back した後、それらをインプレースで拡張するためのスペースが不足しているため、他のスペースに移動される可能性があります。彼らはまだ近くに保管されますか?

ありがとうございました。

編集1

ありがとう、順次スキャンのパフォーマンスを向上させるためにそれらをまとめた実装はありますか?

4

2 に答える 2