我有一个我作为练习编写的池分配器,它实现了C ++ 11 std :: allocator需求的启动和运行,它运行正常,但是我用作参考的策略(基于以下文章):< / p>
https://pdfs.semanticscholar.org/4321/a91d635d023ab25a743c698be219edcdb1a3.pdf
非常适合将一个对象分配到一个足够大小的内存块中。
我注意到std :: allocator模板方法“allocate”有一个参数,其中STL容器可以请求同时分配的块数。例如,它看起来像std :: basic_string,一旦它超过它保留在堆栈上的特定大小的字符串,通过从分配器请求连续的内存块足够大以存储char数组,将整个事物移动到堆上拿着整个字符串。 std :: vector的动态扩展似乎以类似的方式工作。
有没有办法让一个分配器适应这种类型的STL容器所返回的固定大小的块大小?
答案 0 :(得分:1)
你可以走这条路:
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.
并将每个不同大小的请求视为对新池的请求,即您的&#34;对象大小&#34;实际上是对象*计数。 你会烧掉很多内存。 您可以在数组大小上加上一个上限,然后回到默认的泛型分配上面。