繁体   English   中英

使固定大小的块池分配器适应某些STL容器

[英]Adapting a fixed-sized chunk pool allocator to certain STL containers

我有一个作为练习编写的池分配器,它可以启动并运行C ++ 11 std :: allocator需求,并且可以正常运行,但是我用作参考的策略(基于以下论文):

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

将单个对象一次分配到一个具有足够大小的内存块中确实非常有用。

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

有什么方法可以使分配器设计为将固定大小的块返回为其模板化的类型的大小,以返回此STL容器的类型?

您可以沿着这条路线走:

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.

并将每个不同大小的请求都视为对新池的请求,即您的“对象大小”实际上是对象*计数。 您将消耗大量RAM。 您可以在数组大小上设置上限,然后退回到默认的常规分配之上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM