释放 boost::singleton_pool 中的所有对象

Free all objects in boost::singleton_pool

本文关键字:对象 pool boost singleton 释放      更新时间:2023-10-16

有没有办法一次释放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(("功能,因为那将是一个错误农场。