2012-04-27 3 views
3

boost::singleton_pool을 사용하여 고성능 중요 다중 스레드 응용 프로그램에 'Order'유형의 많은 개체를 만들려고합니다. 문서를 보면,이게 내가boost :: singleton_pool의 개체 만들기

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

부스트 :: singleton_pool가 무효 *의 포인터를 반환하는 정적 멤버 함수의 malloc을 가지고 일을해야 것입니다,하지만 난 OrderPool의 종류 주문의 객체를 생성해야 생성자를 호출하여 singleton_pool과 함께 boost::pool_allocator을 사용해야합니까?

감사합니다.

답변

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을 직접 사용할 필요가 없습니다.

0

이 같은 배치 newsingleton_pool를 사용할 수 있습니다

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

를 사용하거나 boost::object_pool<Order>