0

Boost ライブラリのかなり制限された機能をプロジェクトに追加しようとしました。つまり、「pool_allocator」クラスの助けを借りてプールから小さなオブジェクトにメモリを割り当て、プロジェクトの依存関係を 4 つのデバッグ スタティック ライブラリに追加する必要があることを発見しました。ファイルと 4 つのリリース スタティック ライブラリ ファイル。つまり、次のような 1 行に 8 つのライブラリ ファイルの依存関係が必要です。

boost::container::vector<int, boost::pool_allocator<int> > v;

静的ライブラリにリンクせずにこれらのクラスを使用する方法はありますか? (おそらく、テンプレート パラメータの特定の組み合わせでしょうか?)

4

2 に答える 2

3

ブーストプールについて私が読んだのは、まったく使用しないことだけです。ライブラリはかなり古いものです (boost 1.54 では、2010 年に編集された pool_alloc.hpp を除いて、すべてのファイルに 2000 年と 2001 年の著作権があります)パフォーマンスに関する質問については、ここを参照してください (James Kanze の回答を参照してください)。ブーストのみを使用する場合は、別のライブラリを使用することをお勧めします。カスタム アロケータが必要な場合は、ベンチマークを実行してください。

編集:

プール ドキュメントから:

一般に、異常なメモリ制御を行うためのより効率的な方法が必要な場合は、プールを使用します。

質問は、異常なメモリ制御とは正確には何ですか? それは記憶に対するあなたの特別な必要性を満たしていますか? Andrei Alexandrescuは、"Modern C++ Design" でメモリ割り当てについて書いており、割り当て割り当て解除のパターンによって要件が大きく異なる可能性があると述べています。しかし、この論文によると、彼はそれが非常に良い章だったと確信していません.

したがって、私にとって最後の質問は、問題のメモリ管理について、プールが std::allocator よりも優れているかどうかです。あなたはそれを台無しにする必要があります。プールに実装されたロジックがほとんどなくても、実装で使用されるメモリ管理のためのより効率的なアルゴリズムが存在する場合があります。ちなみに、プールのバグの 1 つは、「ドキュメントで主張されているようにヘッダーのみではなく、プール ライブラリをブーストする」です。

于 2013-07-16T07:58:11.290 に答える
0

ブーストから必要なファイルを特定し、プロジェクトに個別に追加するか、必要な .cpp を #include した .cpp をプロジェクトに追加します。(あまりお勧めしません)

また

このような依存関係を簡単に追加できるように、スクリプトによってプロジェクト ファイルを生成します。これを設定するのは面倒ですが、それがあるのは素晴らしいことです

于 2013-07-16T07:24:43.933 に答える