我想创建一些这样的共享指针
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()
会有所作为吗?