c++ - 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_allocator
with allocate_shared()
。使用boost::allocate_shared()
而不是std::allocate_shared()
有所作为?
解决方案
推荐阅读
- flutter - 如果参数为空,则使用默认值
- email - 如何唯一标识邮件回复?
- android - 如何修复 Android Studio 上的 Error Type 3 错误?
- c++ - 如何从 C++ 模板中解压 std::tuple?
- c++ - 设置循环等待用户输入(C++)
- matlab - FOC 算法中的非常量转矩问题 (Simulink)
- node.js - post.save 不起作用(Node/Express/MongoDB)
- apache-spark - Spark SQL - 加入后保留一个结果
- c# - 获取动态 JSON 值并打印出来
- javascript - 如何在 Swift 中获取当前正在播放的歌曲(在设备上)标题?