PmergeMe パフォーマンス分析

`std::vector`はなぜ`std::deque`より高速だったのか?このインタラクティブレポートで、データ構造の内部的な違いが、現代のコンピュータでいかに大きな性能差を生むかを探ります。

パフォーマンス比較ダッシュボード

`vector`の処理時間

41,071 µs

`deque`の処理時間

277,235 µs

性能差

6.7倍 高速

なぜこの差が生まれるのか?

1. メモリ配置の違い

`vector`と`deque`は、メモリ上でのデータの持ち方が根本的に異なります。

`std::vector`:連続メモリ

本棚に本が順番に並んでいるように、データが物理的に隣り合って配置されます。

1
2
3
4

`std::deque`:断片化メモリ

本が部屋のあちこちに散らばっているように、ブロック単位でデータがバラバラに配置されます。

1
2
...
3
4

2. CPUキャッシュの威力

このメモリ配置の違いが、CPUの「キャッシュ」機能と組み合わさることで、決定的な性能差を生み出します。

CPU
🚀 キャッシュヒット!(超高速)
🐢 キャッシュミス!(低速)
メインメモリ

`vector`のようにデータが連続していると、CPUは次に必要になるデータを高速なキャッシュメモリに先読みできます(**キャッシュヒット**)。しかし`deque`のようにデータが断片化していると、その都度低速なメインメモリまでデータを取りに行く必要があり(**キャッシュミス**)、これが大きな遅延の原因となります。

結論

このテストは、理論上のアルゴリズムだけでなく、**データがメモリ上でどう配置されるか(データ局所性)**が、現代のコンピュータ性能に絶大な影響を与えることを示しています。ランダムアクセスを多用する今回のシナリオでは、`vector`の**キャッシュ効率の良さ**が、`deque`の挿入性能の利点を完全に圧倒しました。