3

我正在尝试使用boost::singleton_pool在高性能关键多线程应用程序中创建大量“订单”类型的对象。查看文档,这是我应该做的,

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

boost::singleton_pool 有一个静态成员函数 malloc,它返回 void* 的指针,但我需要通过调用其构造函数在 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 但它是在最低级别控制内存管理的东西。例如,我编写了 UserAllocator,它通过 mmap() 函数分配内存,根本不使用堆。

因此,要创建“订单”类型的对象,您应该使用boost::pool_allocatorboost::fast_pool_allocator。在您的情况下,没有必要直接使用 boost::singleton_pool 。

于 2012-07-02T22:24:32.523 回答
0

您可以像这样使用singleton_pool放置new

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

或使用boost::object_pool<Order>

于 2017-01-29T12:51:07.337 回答