gpt4 book ai didi

c++ - 使固定大小的 block 池分配器适应某些 STL 容器

转载 作者:行者123 更新时间:2023-11-28 04:57:28 26 4
gpt4 key购买 nike

我有一个我作为练习编写的池分配器,它实现了 C++11 std::allocator 要求并运行它工作正常,但我用作引用的策略(基于以下论文):

https://pdfs.semanticscholar.org/4321/a91d635d023ab25a743c698be219edcdb1a3.pdf

仅适用于一次将单个对象分配到一个足够大的内存块中。

我注意到 std::allocator 模板方法“allocate”有一个参数,其中 STL 容器可以请求同时分配的 block 数。例如,它看起来像 std::basic_string,一旦它超过一定大小的字符串,它就会保留在堆栈中,通过从分配器请求足够大的连续内存块来存储一个 char 数组,立即将整个字符串移到堆中持有整个字符串。 std::vector 的动态扩展似乎以类似的方式工作。

有没有什么方法可以使分配器适应这种类型的 STL 容器,该分配器旨在返回固定大小的 block ,其大小与模板化的类型相同?

最佳答案

你可以沿着这条路走:

On the other hand, multiple instances of numerous fixed-sized
pools can be used to produce a general overall flexible
general solution to work in place of the current system
memory manager.

并将每个不同大小的请求视为对新池的请求,即您的“对象大小”实际上是对象*计数。你会烧掉很多内存。您可以为数组大小设置一个上限,然后回退到高于该上限的默认通用分配。

关于c++ - 使固定大小的 block 池分配器适应某些 STL 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46850252/

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