たとえば、次のコードは 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
ありがとう、順次スキャンのパフォーマンスを向上させるためにそれらをまとめた実装はありますか?