2012-04-27 9 views
3

boost::singleton_poolを使用して、高性能クリティカルなマルチスレッドアプリケーションで「Order」タイプのオブジェクトを多数作成しようとしています。ドキュメントを見ると、これは私がboost :: singleton_poolでのオブジェクト作成

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

ブースト:: singleton_poolがvoid *のポインタを返す静的メンバ関数malloc関数を持って、やるべきものですが、私はOrderPoolでタイプ注文のオブジェクトを作成する必要がありますそのコンストラクタを呼び出すことによって呼び出されます。 singleton_poolと一緒にboost::pool_allocatorを使用しますか?

ありがとうございました。

答えて

0

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

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

0

あなたはこのように配置newsingleton_poolを使用することができます。

Order* p = new (OrderPool.malloc()) Order(/* add ctor parameters if any*/); 

を使用したりboost::object_pool<Order>

関連する問題