std::deque の実装

まだ調査中の段階なんでいろいろと間違っているかも知れませんが、例の STL のサブセット作成の為に std::deque について調べたところ...

  • 規格( ISO/IEC 14882, JIX X 3014 )には実装方法は一切明記されていない。
  • 各種コンパイラでの実装を調べたところ、概ね、要素を直接格納するバッファとそのバッファの集合を管理するテーブル(マップ)によって構成されている。

...と、いった感じで、その「要素を直接格納するバッファ」のブロックサイズは次のようになっているようです。

コンパイラ バイト数
Borland C++ 5.2 1024
Borland C++ 5.5.1 1024
Borland C++ 5.6.4 128
Borland C++ 5.9 16
Microsoft Visual C++ 6 4096
Microsoft Visual C++ 7.1 16
Microsoft Visual C++ 8 16
Metrowerks C/C++ Compiler 2.4 512
Metrowerks C/C++ Compiler 3.0.1 512
Open Watcom C/C++ 1.5 16
g++ 3.4.4 512

...あまりにも数字に極端な開きがあるところを見ると、実際には実装方法からして大きな違いがあるのかも知れませし、厳密な調べ方をしているわけではないのでそもそも明後日な調査結果になっているかも知れません。