1

list、map、multi_map などのノードベースのコンテナーに最適なアロケーターは何ですか? boost::unordered_map<std::array<char, 32>, int>400 万件のエントリがあります。(パフォーマンスのために) 400 万の個別の割り当ては避ける必要があります。

理想的には、アロケーターは複数の (非常に) 大きなチャンクを割り当て、それらをノードごとのオーバーヘッドが 0 のノードに分割します。空きノードは追跡する必要がありますが、チャンクはプール全体が破棄またはリセットされるまで解放する必要はありません。プールは (パフォーマンスのために) スレッドセーフであってはなりません。

自分で書いてみることもできますが、車輪の再発明は好きではありません。ノード側を事前に知らないことも問題のようです。

ブーストにはプールがありますが、シングルトンの使用しか提供していないようです。

4

1 に答える 1

1

Loki small object allocatorを適応/ラップできます。同じサイズの小さなオブジェクトに適しています。別のオプションは、Boost.Poolを使用することです。オブジェクト指向 (非シングルトン) の使用をサポートしていますが、 でサポートされているアロケーター オブジェクトにラップする必要がありますboost::unordered_map

于 2012-05-02T17:34:36.403 に答える