【发布时间】:2018-04-01 16:38:13
【问题描述】:
我有一个作为练习写的池分配器,它实现了 C++11 的 std::allocator 要求并且运行良好,但我用作参考的策略(基于以下论文):
https://pdfs.semanticscholar.org/4321/a91d635d023ab25a743c698be219edcdb1a3.pdf
只有在一次将单个对象分配到一个足够大的内存块时才真正有用。
我注意到 std::allocator 模板方法“allocate”有一个参数,STL 容器可以在该参数中请求同时分配的块数。例如,它看起来像 std::basic_string,一旦它超过了它保留在堆栈上的某个大小的字符串,通过从分配器请求一个足够大以存储 char 数组的连续内存块,立即将整个内容移动到堆中拿着整个字符串。 std::vector 的动态扩展似乎以类似的方式工作。
有没有办法调整分配器,该分配器旨在将固定大小的块返回到这种类型的 STL 容器?
【问题讨论】:
-
标准分配器需要能够为其模板化类型的指定数量的项目分配连续存储。
-
可以提供(可选)成员
size_type max_size(),违反时抛出
标签: c++ c++11 memory-management stl