当你想减小向量的大小时,为什么没有std :: vector :: resize()释放内存?

时间:2014-10-17 14:41:25

标签: c++ vector resize

我不明白为什么当我想减小其大小时,我必须使用std::vector::swap()来释放vector的内存。

为什么有人想缩小vector的大小,同时保留剩余的未使用内存?

2 个答案:

答案 0 :(得分:4)

降低载体的容量涉及

  • 分配新存储空间
  • 复制现有元素
  • 解除分配旧存储空间

这些都不是免费的。真正缩小向量会产生与之相关的成本,并且用户应该默认支付它。

答案 1 :(得分:0)

为了回答你的问题,为什么有人想要在不解除分配的情况下减少矢量,这是我目前正在研究的另一个场景:

我需要一个连续缓冲区,其大小不是先验已知的,所以我使用向量来构建它。在程序执行期间,我实际上需要多次(> 100k),并且每次缓冲区的大小可能略有不同。我想回收这个缓冲区,所以我不会在每个周期都进行昂贵的重新分配。前几个周期相当昂贵,因为它们在所有push_backs期间重新分配了几次。在前100个循环之后,矢量的容量已经增大到足以保持其所需的大小,我不再在每个周期分配和释放存储器而且我只使用了大约尽可能多的内存(当运行多个线程并可能撞到整个系统RAM时很重要)。