将C ++ STL向量保留太多容量会花费大量内存吗?

时间:2017-07-27 12:28:29

标签: c++ memory vector stl

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

我是否可能冒险尝试将预留容量降低到预期的矢量大小,这是否会使程序运行稳健且可能更快?

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

我在手机上运行具有高计算负载任务的代码,因此仍然需要考虑内存开销。

1 个答案:

答案 0 :(得分:1)

  

向量是否始终保持内存,而不释放资源和   成本是一种记忆浪费?

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

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

  

我是否可能冒险尝试将储备(容量)降低到预期值   向量的大小,使程序运行稳健,可能更快?

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

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