C ++:将std :: allocate_shared与boost pool_allocator和release_memory()

时间:2018-08-05 18:08:19

标签: c++ boost shared-ptr pool

我想创建一些这样的共享指针

typedef boost::pool_allocator<MyClass> PoolAlloc;
std::shared_ptr<MyClass> p = std::allocate_shared<MyClass, PoolAlloc>(PoolAlloc());

由于我要这样做很多次,所以内存将从池中获取。

随着程序流程的继续,智能指针将被删除/超出范围,并将内存返回到池中。

但是仍然要分配池内存,并且我不时地希望减少该未使用的内存,并将其返回给操作系统。

为此目的,可以使用boost::singleton_pool::release_memory()方法。但是boost::singleton_pool是根据已分配对象的大小进行模板化的,如下所示:

boost::singleton_pool<boost::pool_allocator_tag, sizeof(MyClass)>::
release_memory();

我现在不确定此调用是否会达到预期的效果(我的猜测是“否”),因为allocate_shared实际上不是从给定池中分配,而是从其他池中分配(持有大小{{1}的未知类型) }。

我的问题是如何从sizeof(MyClass) + sizeof(Control_Block)使用的release_memory()中正确boost::pool_allocator。使用allocate_shared()代替boost::allocate_shared()会有所作为吗?

0 个答案:

没有答案