[英]Should new C++ code use memory resources instead of allocators?
C++17 将为我们带来std::pmr::memory_resource
,它是一个用于分配和释放内存的干净接口。 与Allocator概念不同,它仅能做到这一点,仅此而已。 还将有std::pmr::polymorphic_allocator
将内存资源包装到经典分配器中,以便它可以与现有容器一起使用。
如果我要编写一个针对 C++17 及更高版本的新容器(或其他内存饥饿)类型,我应该继续针对分配器概念进行编程还是直接使用更新和更清晰的抽象?
到目前为止,我的想法是这样的。
继续使用分配器的原因:
std::pmr::*
容器别名也继续使用分配器。std::pmr::polymorphic_allocator
,因此 allocator 接口更加通用,可以满足更多客户端的需求。开始使用内存资源而不是分配器的原因:
std::pmr::memory_resource
接口简洁明了。std::pmr::polymorphic_allocator
来实例化仍然使用分配器的子对象。 反过来就更难了。是否已经存在关于如何有效使用新库功能的任何建议?
在这一点上没有。
C++ 中的分配器目前比以前容易得多。
它们提供 pmr(多态)和经典分配器支持。
更重要的是,基于 pmr 的分配多年来一直没有被大量使用。 任何弱点都可能会暴露出来。
基于快速池的分配器,甚至固定缓冲区分配器或 sbo(小缓冲区优化)扩展,可能会注意到虚拟化开销。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.