gpt4 book ai didi

c++ - boost pool_alloc

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:10 26 4
gpt4 key购买 nike

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

我有一个类在内部使用大约 10 种不同的 boost::unordered_map 类型。如果我使用了 std::allocator,那么在它调用 delete 时所有内存都会返回给系统,而现在我必须在某些时候对许多不同的分配器类型调用 release_memory。我自己推出使用池而不是 singleton_pool 的分配器是否愚蠢?

谢谢

最佳答案

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

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

Implementations of containers described in this International Standard are permitted to assume that their Allocator template parameter meets the following two additional requirements beyond those in Table 32.

  • All instances of a given allocator type are required to be interchangeable and always compare equal to each other

然后它继续说:

Implementors are encouraged to supply libraries that can accept allocators that encapsulate more general memory models and that support non-equal instances. In such implementations, any requirements imposed on allocators by containers beyond those requirements that appear in Table 32, and the semantics of containers and algorithms when allocator instances compare non-equal, are implementation-defined.

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

参见 this other SO answer了解一些额外的细节(看起来我需要倾向于对那个答案进行一些 promise 的更新......)

关于c++ - boost pool_alloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2549602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com