【发布时间】:2011-12-02 09:18:21
【问题描述】:
我的 STL 容器中的内存使用预计会不稳定 - 也就是说,它会经常收缩和增长。我正在考虑通过为 STL 容器类型声明指定分配器来解决此问题。我知道池分配器旨在处理这种情况,但我担心波动性将超出池的考虑范围,为了克服它,我必须进行大量测试以确定良好的池指标。
我的理想分配器将从不隐式释放内存,事实上,如果内存只在分配器销毁时才被释放,那是完全可以接受的。显式释放未使用内存的成员函数会很好,但不是必需的。我知道我所指的听起来像是一个每个对象的分配器,这违反了标准。我宁愿坚持标准,但如果我不能在其中解决这个问题,我会放弃它。
我不太关心初始性能,而更关心平均性能。换句话说,一次分配单个元素还是其中的一个池无关紧要,而所述分配是否导致对 new/malloc 的调用更重要。我编写自己的分配器没有问题,但是有谁知道实现这一点的预先存在的分配器?如果它有所作为,这将适用于连续的内存容器(例如向量、双端队列),尽管通用的解决方案会很好。
【问题讨论】:
-
默认的 STL 分配器在“以防万一”的情况下保留了相当大的内存块。你确定这还不够吗?
-
deque不是一个连续的内存容器。 -
如果可能的话,我希望分配器对大型和小型容器都有用,因此保留大量额外内存(尤其是每个对象)可能太浪费了?这听起来可能与我所说的不释放内存相矛盾,但其想法是内存将被要求,而不是“以防万一”分配。
-
关于双端队列更正 - 它不保证连续元素。我几乎从未使用过它,但记得它支持通过位置索引进行随机访问。
-
@bdonlan:
std::deque需要提供 [amortized] 恒定时间随机访问
标签: c++ memory-management stl allocator