【发布时间】:2021-09-19 19:17:17
【问题描述】:
我知道 std::vector 不会减少它的容量,但由于 std::deque 是按块分配的,我希望它至少可以释放一些不再使用的块。
从我搜索的内容来看,我很困惑,因为答案似乎是“不”或“也许”。谁有具体的答案?
如果它不释放它的块,有谁知道这样做的其他实现吗?
我正在为当前使用链表但性能不佳的应用程序重新设计集思广益,这就是我考虑使用双端队列的原因。挑战是我的应用程序应该运行一整天,它会有大量的双端队列,每个都可能变得很长,因此我不能忽视双端队列或向量的存储使用。
【问题讨论】:
-
std::vector和std::deque都有shrink_to_fit,这在这两种情况下都只是一个“请求”。我认为这是一个明确的“也许” -
听起来您正在尝试规避内存泄漏,这是代码错误。许多使用大向量的应用程序每天 24 小时运行,没有任何问题。此外,它是编译器的堆管理器,它控制对“释放”内存的实际调用是否会释放内存。当您调用
delete或free时,您所做的只是告诉运行时有插槽打开——内存是否真正被操作系统释放是另一回事。 -
另外,
std::vector和std::deque有一个分配器作为第二个模板参数。您可以尝试创建一个与您想要实现的目标相匹配的产品。 -
@PaulMcKenzie 那么双端队列调用是释放还是删除未使用的块?
标签: c++ stl stdvector stdlist stddeque