首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提升pool_alloc

提升pool_alloc
EN

Stack Overflow用户
提问于 2010-03-31 08:23:36
回答 1查看 1.3K关注 0票数 6

为什么boost::fast_pool_allocator构建在一个单独的池之上,而不是每个分配器实例一个单独的池?或者换一种说法,为什么只提供这一点,而不是每个分配器有一个池的选项?这样做会不会是个坏主意?

我有一个在内部使用大约10种不同boost::unordered_map类型的类。如果我使用std::allocator,那么当系统调用delete时,所有的内存都会返回到系统,而现在我不得不在某个时刻对许多不同的分配器类型调用release_memory。如果我使用自己的分配器而不是singleton_pool,那会不会很愚蠢呢?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-31 08:30:57

分配器很难有状态,因为一个分配器的所有实例都必须是“等价的”才能被标准库使用(至少是可移植的)。

来自20.1.5/4“分配器要求”:

本国际标准中描述的容器的

实现允许假定它们的分配器模板参数满足表32中以外的以下两个额外要求。

  • 给定分配器类型的所有实例都要求是可互换的,并且始终相互比较相等

然后它继续说:

鼓励

实现者提供可以接受分配器的库,这些分配器封装了更通用的内存模型,并支持不相等的实例。在这样的实现中,除了表32中出现的那些要求之外,容器对分配器施加的任何要求,以及当分配器实例比较不相等时容器和算法的语义,都是由实现定义的。

因此,可以编写一个实现来允许不等价的分配器实例,但是您的分配器依赖于实现定义的行为。

有关更多细节,请参阅this other SO answer (看起来我需要注意该答案的一些承诺更新……)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2549602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档