C ++ 17将为我们带来std::pmr::memory_resource
,这是一个分配和释放内存的干净界面。与Allocator概念不同,它仅仅 ,仅此而已。还有std::pmr::polymorphic_allocator
将内存资源包装到经典分配器中,因此它可以与现有容器一起使用。
如果我要编写一个针对C ++ 17及更高版本的新容器(或其他需要大量内存的),我应该继续针对 Allocator 概念进行编程,还是使用更新的清洁抽象直接?
截至目前,我的想法是这样的。
继续使用分配器的原因:
std::pmr::*
容器别名也继续使用分配器。std::pmr::polymorphic_allocator
,因此分配器接口更通用,可以满足更多客户端的需求。开始使用内存资源而不是分配器的原因:
std::pmr::memory_resource
界面干净简洁。std::pmr::polymorphic_allocator
来实例化仍然使用分配器的子对象。反过来说比较困难。是否已经有关于如何有效使用新库功能的建议?
答案 0 :(得分:8)
此时没有。
C ++中的分配器目前比以前容易得多。
它们提供pmr和经典分配器支持。
更重要的是,基于pmr的分配多年来一直没有被大量使用。任何弱点都可能仍然存在。
基于快速池的分配器,甚至是固定缓冲区或sbo扩展,可能会注意到虚拟化开销。