std::mapとboost::unordered_mapの違いについては多くの議論があります。しかし、boost :: interprocess :: mapはどうですか?
誰かがboost::interprocess::mapとstd::mapの間でパフォーマンステストを実行しましたか?
私はinterprocess::mapをあまり使用していませんが、1Mを超えると、非常に遅くなると感じています。
ありがとう
std::mapとboost::unordered_mapの違いについては多くの議論があります。しかし、boost :: interprocess :: mapはどうですか?
誰かがboost::interprocess::mapとstd::mapの間でパフォーマンステストを実行しましたか?
私はinterprocess::mapをあまり使用していませんが、1Mを超えると、非常に遅くなると感じています。
ありがとう
Boostインタープロセスコンテナは、カスタムアロケータを備えた標準コンテナです。
理由:2つのプロセスがメモリを共有している場合、メモリは2つのプロセスの異なるアドレスにマップされます。共有メモリオブジェクトへのポインタを使用できるようにするには、絶対アドレスではなく相対オフセット(両方のプロセスで同一)を使用する必要があります。
したがって、関連するアロケータクラスはboost::interprocess
、逆参照時に追加の算術演算を含みます。pointer
これらは、通常のポインターよりも使用するのが少し重いカスタムタイプを定義します。
それを除けば、コンテナは標準のものとまったく同じです。同じ複雑さであり、要素アクセスでのわずかなオーバーヘッド(追加の追加)。map
たとえば、との違いはunordered_map
、特別なプロセス間アロケータを使用する場合にそのまま反映されます。
それは意味のある比較ではありません。それらはまったく異なる目的で使用されます。
interprocess :: mapは、プロセス間でデータを共有するために使用されます。std :: mapは、単一のプロセス内で使用されます。
ファイルboost/interprocess / containers / container / map.hppにこのコメントがあります:
// This file comes from SGI's stl_map/stl_multimap files. Modified by Ion Gaztanaga.
// Renaming, isolating and porting to generic algorithms. Pointer typedef
// set to allocator::pointer to allow placing it in shared memory.
したがって、パフォーマンスの違いは、共有の種類とオペレーティングシステムに依存する、使用されるアロケータのパフォーマンスの違いに起因します。