データの小さなベクトルが多数ある場合にケースを最適化できるかどうかを確認しようとしています。私の使用例では、これらのベクトルが 100,000 以上ある可能性があるため、ベクトル ストレージのサイズが重要になります。それぞれが 1 つまたは 2 つの要素しか持たないこともありますが、多くの場合、容量が大きくなる可能性があります。
シンプルな std::vector を使用してみましたが、メモリを浪費し、タイムクリティカルな環境では時間がかかりすぎるヒープに N 個の小さなバッファーを割り当てるため、これは非常に遅くなります。効果的には、ベクターに対するスモール バッファー最適化 (SBO) が実行可能なソリューションのように見えます。これは、ベクターの内部 (つまりスタック) データがそれを超えるまで使用され、それを超えて初めてヒープを使用する必要があることを意味します。
まさにそれを行うように見えるLLVM SmallVectorに出くわしました。ただし、LLVM フレームワーク内には多くの依存関係があるようで、Boost にも同様のものがあるかどうか疑問に思っていましたか? Boost 実装によって SBO 最適化が実行される可能性がありますが、検索でこれに関する参照が見つかりません。STL 実装は、イテレータに関するいくつかのルールのために、この最適化を行うことは技術的に禁止されていることがわかりましたか?
リンク: LLVM SmallVectorは、LLVM ソフトウェアの内部ソース コードにあります。