[英]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.