首页 > 解决方案 > C++:将 std::allocate_shared 与 boost pool_allocator 和 release_memory() 一起使用

问题描述

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

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

当我要这样做很多次时,内存会从池中取出。

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

然而,池内存仍然被分配,并且每隔一段时间我想减少未使用的内存并将其返回给操作系统。

为此 boost 有boost::singleton_pool::release_memory()方法。然而boost::singleton_pool,模板化的是分配对象的大小,如下所示:

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

我现在不确定这个调用是否会产生预期的效果(我的猜测是没有),因为 allocate_shared 实际上并没有从给定的池中分配,而是从不同的池中分配(持有未知类型的对象sizeof(MyClass) + sizeof(Control_Block))。

我的问题是如何正确release_memory()使用boost::pool_allocatorwith allocate_shared()。使用boost::allocate_shared()而不是std::allocate_shared()有所作为?

标签: c++boostshared-ptrpool

解决方案


推荐阅读