c++ - 池化分配器 + boost::intrusive_ptr

标签 c++ boost smart-pointers

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

最佳答案

我想我写的正是您要查找的内容:

https://github.com/cdesjardins/QueuePtr

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

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

这里有一个指向池的 shared_ptr,其中有 700 个缓冲区,每个缓冲区为 1024 字节。

然后就可以得到一个buffer:

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();

当引用计数下降表明缓冲区不再使用时,它会自动放回池中并可以重复使用,缓冲区也会重置为其原始内存分配,以防你弄乱它(就像我上面做的)在使用过程中。

关于c++ - 池化分配器 + boost::intrusive_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18072610/

相关文章:

c++ - 派生类中基构造函数的控制,潜在的双重初始化

c++ - 如何正确处理 SIGBUS 以便我可以继续搜索地址?

c++ - 代表C++类模板中的空类型

c++ - 工厂函数的最佳智能指针返回类型是什么?

java - 通过 JNI 将多个参数从 java 传递到 c++ 应用程序

c++ - 使用默认参数 boost list_of

c++ - 带有 vector 的 shared_ptr

c++ - Boost MultiIndex - 对象或指针(以及如何使用它们?)?

c++ - 将 enable_shared_from_this 基类指针(this)存储在自身中

C++ 智能指针自己的实现