释放 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);

我想我可以通过手动遍历它们来使用它们来释放所有对象。但是,有什么办法可以说 "free all the objects" 使池再次完全空闲?

基本上我想要类似 purge_memory() 的东西,但这不会将内存释放回系统,而是将其分配在池中。

这样做的原因是我在池中构建了一个大对象 (~2GB),我想很快摆脱它并开始构建一个新对象。调用 purge_memory() 目前大约需要 2 秒,并且还会向系统释放内存(在诊断或任务管理器中,您可以看到进程内存在减少)。我希望通过简单地释放池中的东西而不实际释放,我可以非常快速地炸掉第一个对象并开始构建下一个。

假设您在 singleton_pool 中分配了 1000 个对象,总计 2 GB。如果有一个 "free_all()" 函数(实际上没有),您将如何确保您仍然没有指向池中包含的数据的指针?您需要遍历所有此类指针以重置它们。当你这样做时,你也可以在每个上调用 singleton_pool::free(ptr)

基本上,您要求的 API 不存在,而且可能不应该存在。如果您想要最灵活(并且在我看来最有用)API,请使用常规 boost::pool,而不是通常会阻碍优化的更高级层。但是,它仍然没有 "free_all()" 功能,因为那又是一个错误农场。