【问题标题】:Will C++ STL vector reserving too many capacity costs lots of memory? [duplicate]保留太多容量的 C++ STL 向量会占用大量内存吗? [复制]
【发布时间】:2017-07-27 12:28:29
【问题描述】:

在我的代码中,如果我调用 vector::reserve(capacity) 并分配比我实际需要的更多容量来让向量保存元素,那么在我的程序运行期间,向量是否会一直保存内存,不释放资源和成本?如果是这样,那不是那种内存浪费吗?

我是否可以冒险尝试将储备容量降低到向量的预期大小,这是否会使程序运行得更健壮并且可能更快?

这会降低内存不足的可能性吗?

我在手机上运行代码,计算负载很高,所以还是需要考虑内存开销。

【问题讨论】:

  • 是的,它将始终具有保留的内存量,除非向量的实际大小超出此范围并且它将像往常一样重新分配。至于您的其他问题,由您决定。
  • 填充向量后,您可以随时shrink the capacity to fit the size

标签: c++ memory vector stl


【解决方案1】:

vector 是否会一直持有内存,而不是释放资源和 浪费内存?

向量不会释放/重新分配内存。

如果它重新分配了内存,那么所有引用存储在该向量中的元素的迭代器、引用和指针都将失效,恕不另行通知。

我可以冒险尝试将储备(容量)降低到预期吗 向量的大小并使程序运行健壮并且可能更快?

如果您知道向量大小最终将达到恒定大小或具有最小大小,我会说一个好的做法是调用reserve。否则,失去对reserve 的呼叫。让向量自己计算。你会意识到向量重新分配可能不是你程序的瓶颈。

您还可以调用shrink_to_fit 以确保您的向量完全使用它所需的内存量。

【讨论】:

  • 这个答案解析不正确。您是说向量 释放内存(“不,它不会”)。它这样做是因为它可以确保不会使指针和引用无效
  • 我改写了。
猜你喜欢
  • 1970-01-01
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多