C++ ';标签';boost::pool_分配器和boost::fast_pool_分配器中的模板参数是否支持控制基础池的实例?

C++ ';标签';boost::pool_分配器和boost::fast_pool_分配器中的模板参数是否支持控制基础池的实例?,c++,boost,pool,allocator,C++,Boost,Pool,Allocator,更新:问题在我第一次编写时不再适用,因此我修改了问题的标题该问题现在应询问是否修改pool\u分配器或boost\u pool\u分配器以接受一个标记参数,该参数控制所用基础池的选择(如问题中所述)这是一个好主意——或者这是否可以在不修改库的情况下实现——如果没有其他方法的话,这对Boost.Pool是否有用 对于一个项目,我非常依赖Boost.Pool(因为对于数以百万计的不再使用的小对象来说,标准内存释放需要非常非常长的时间(~30分钟) (关于我在编写本项目时发布的另外两个问题,请参见和

更新:问题在我第一次编写时不再适用,因此我修改了问题的标题该问题现在应询问是否修改
pool\u分配器
boost\u pool\u分配器
以接受一个
标记
参数,该参数控制所用基础池的选择(如问题中所述)这是一个好主意——或者这是否可以在不修改库的情况下实现——如果没有其他方法的话,这对Boost.Pool是否有用


对于一个项目,我非常依赖Boost.Pool(因为对于数以百万计的不再使用的小对象来说,标准内存释放需要非常非常长的时间(~30分钟)

(关于我在编写本项目时发布的另外两个问题,请参见和,这两个问题与Boost Pool有关。)

我的场景是:我有许多不同的池,通常存储相同大小的对象,需要在非常不同的时间释放它们。为了实现这一点,我利用
boost::fast\u pool\u allocator
中的
Tag
模板参数来控制池(特别是何时删除哪个池)

例如,我的代码(在使用不同标记的Boost池的许多其他用途中)有一行-请注意末尾附近的自定义分配器(a
Boost::fast\u Pool\u分配器
):

经过很多努力,定义了至少20种不同的池类型,我的内存问题得到了解决,我继续前进

这就是Boost.Pool 1.55版

在Boost.Pool 1.56版中,我惊讶地看到,
Pool\u分配器
fast\u Pool\u分配器
标记
参数已被删除

以下是两个版本:

第1.55版:

// boost::pool_allocator, version 1.55
template <typename T,
    typename UserAllocator,
    typename Tag,  // <-- This was removed in version 1.56: How to distinguish pools?
    typename Mutex,
    unsigned NextSize,
    unsigned MaxSize >
class pool_allocator {...}
//boost::pool\u分配器,版本1.55

template我假设标记模板参数被透明地“转发”到底层池

标记类型仍然存在,但不是公共接口的一部分。例如:

const pointer ret=static\u cast(

singleton_pool::ordered_malloc(n))

因此,您可以(再次:)修改代码,将自己的标记传递给基础池,而不是硬编码
pool\u allocator\u tag
fast\u pool\u allocator\u tag



我建议您将更改保留为补丁,以便更容易跟上上游更改。你可以在图书馆的git@github.com:boostorg/pool.git,这样您就可以
git-rebase
更改。

据我所知,也没有
标记
模板参数。你确定你不是在看某种定制的修改吗?@T.C.你说得对!天哪,我忘了我只是为了这个目的修改了课程。明天,我将更新这个问题来说明这一点,也可能会问,这是否是对类的修改类型,可能是需要的-我当然需要它!向所有花时间回答这个问题的人道歉。我已经更新了问题的标题,并在问题的开头添加了一个更新,以表明这一点。@DanNissenbaum:关闭这个问题可能更好,因为它从来都是无效的,然后建议您修改Boost邮件列表或bug跟踪器(甚至可能在这里作为一个新问题)@JohnZwinck我考虑过关闭它,但我认为可能其他人在使用
pool\u分配器
fast\u pool\u分配器
时会遇到无法控制池的问题,并且可能会遇到这个问题——显然,修改轻量级
pool\u alloc.hpp
文件以通过所需的标签,以便启用此功能-我并不疯狂地想知道这一点。:)所以我想我会让它保持打开状态,只需更改标题并在问题的顶部添加更新。从未想过克隆Boost存储库(即使我以前从未对其进行过更改)。好主意,我会的!
// Here is the 'tag' type used in the above line of code
// ... this distinguishes the pool used
struct newgene_cpp_int_tag 
{};
// boost::pool_allocator, version 1.55
template <typename T,
    typename UserAllocator,
    typename Tag,  // <-- This was removed in version 1.56: How to distinguish pools?
    typename Mutex,
    unsigned NextSize,
    unsigned MaxSize >
class pool_allocator {...}
// boost::pool_allocator, version 1.56
template <typename T,
    typename UserAllocator,
    typename Mutex,
    unsigned NextSize,
    unsigned MaxSize >
class pool_allocator {...}