释放 boost::singleton_pool 中的所有对象
Free all objects in boost::singleton_pool
有没有办法一次释放boost::singleton_pool
中的所有对象?
我看到我可以访问这些方法:
static void free(void *const);
static void ordered_free(void *const);
static void free(void *const, const size_type);
static void ordered_free(void *const, const size_type);
我想我可以使用它们通过手动迭代来释放所有对象。 但是,有没有办法说"释放所有对象",以便池再次完全自由?
本质上,我想要类似purge_memory()
的东西,但这不会将内存释放回系统,而是将其保留在池中。
这样做的原因是我在池中构建了一个大型对象(~2GB(,我想尽快摆脱它并开始构建一个新对象。 调用purge_memory()
当前大约需要 2 秒,并且还会向系统释放内存(在诊断或任务管理器中,您可以看到进程内存在减少(。 我的希望是,通过简单地释放池中的东西而不实际解除分配,我可以非常快速地炸掉第一个对象并开始构建下一个对象。
假设您在singleton_pool中分配了 1000 个对象,总计 2 GB。 如果有一个"free_all(("函数(没有(,您将如何确保仍然没有指向池中包含的数据的指针? 您需要遍历所有此类指针以重置它们。 当你这样做的时候,你不妨打电话给singleton_pool::free(ptr)
。
基本上,您要求的 API 不存在,并且可能不应该存在。 如果你想要最灵活(在我看来也是最有用的(API,请使用常规的boost::p ool,而不是顶部经常阻碍优化的更花哨的层。 但是,它仍然没有"free_all(("功能,因为那将是一个错误农场。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 使用 boost.pool 而不是 'new' 作为对象的容器