汇集分配器+ boost :: intrusive_ptr

时间:2013-08-06 05:47:58

标签: c++ boost smart-pointers

我正在使用boost::intrusive_ptr来处理自动内存管理,但现在我想将它们与池化对象分配结合使用。 Boost Pool是一个很好的起点,还是有另一个普遍接受的做法,用于“智能指针”的汇总分配?

1 个答案:

答案 0 :(得分:0)

我想我写的正是你要找的东西:

https://github.com/cdesjardins/QueuePtr

它基本上是一个线程安全队列,在初始化时使用内存缓冲区填充:

boost::shared_ptr<RefCntBufferPool> pool(new RefCntBufferPool(700, 1024));

你有一个shared_ptr到一个池里面有700个缓冲区,每个缓冲区都是1024字节。

然后你可以得到一个缓冲区:

boost::intrusive_ptr<RefCntBuffer> x;
pool->dequeue(x);

并用它做你喜欢的事,这里有一些例子:

boost::intrusive_ptr<RefCntBuffer> y;
y = x;
y->_buffer = boost::asio::buffer(y->_buffer + 10, 100);
boost::asio::buffer_copy(y->_buffer, boost::asio::buffer("hello"));
x.reset();

当引用计数下降以指示缓冲区不再使用时,它会自动返回池中并可以重用,缓冲区也会重置为它的原始内存分配,以防您搞砸了它在使用过程中(如上所述)。

相关问题