3

boost::singleton_poolを使用して、パフォーマンスが重要なマルチスレッド アプリケーションで「注文」タイプのオブジェクトを多数作成しようとしています。ドキュメントを見ると、これが私がすべきことです。

struct OrderTag{};
typedef boost::singleton_pool<OrderTag, sizeof(Order)> OrderPool; 

boost::singleton_pool には、void* のポインターを返す静的メンバー関数 malloc がありますが、コンストラクターを呼び出して OrderPool に Order 型のオブジェクトを作成する必要があります。これを行うには、 boost::pool_allocatorを singleton_pool と一緒に使用しますか?

ありがとう。

4

2 に答える 2

0

要するに:いいえ。boost::pool_allocator の実装自体は boost::singleton_pool を使用し、 std::allocator のようなインターフェイスを提供するため、ベクトル、リストなどの STL コンテナー (STL だけでなく、コンテナーだけでなく) でも使用できます。 UserAllocator の概念は次のようなものではありません。 boost::pool_allocator ですが、これはメモリ管理を最も低いレベルで制御するものです。たとえば、mmap() 関数を介してメモリを割り当て、ヒープをまったく使用しない UserAllocator を作成しました。

したがって、「注文」タイプのオブジェクトを作成するには、boost::pool_allocatorまたはboost:: fast_pool_allocator を使用する必要があります。あなたの場合、boost::singleton_pool を直接使用する必要はありません。

于 2012-07-02T22:24:32.523 に答える