私は現在、Just In Time(JIT)コンパイラでさまざまなアルゴリズムを実装しようとしています。アルゴリズムの多くは、ビットセット(より一般的にはビットセットとして知られています)で動作します。
C ++では、ビットセットを実装するさまざまな方法があります。真のC++開発者として、私はSTLの何かを使用したいと思います。最も重要な側面はパフォーマンスです。動的にサイズ変更可能なビットセットは必ずしも必要ではありません。
私が見ているように、3つの可能なオプションがあります。
I. 1つのオプションはstd::vector<bool>
、スペース用に最適化されたを使用することです。これは、データがメモリ内で連続している必要がないことも示します。これによりパフォーマンスが低下する可能性があると思います。一方、ブール値ごとに1ビットを使用すると、キャッシュに非常に適しているため、速度が向上する可能性があります。
II。別のオプションは、代わりにを使用することstd::vector<char>
です。データがメモリ内で連続していることを保証し、個々の要素へのアクセスが容易になります。ただし、このオプションはビットセットを意図したものではないため、このオプションを使用するのは奇妙に感じます。
III。3番目のオプションは、実際のを使用することstd::bitset
です。動的にサイズ変更できないという事実は問題ではありません。
最大のパフォーマンスを得るにはどちらを選択すればよいですか?