2017-07-27 91 views
0

在我的代码中,如果我调用vector :: reserve(capacity)并分配比实际需要的矢量更多的容量来存放元素,那么在运行我的程序期间,vector将始终保存内存,而不是释放资源和成本?如果是这样,是不是那种记忆浪费?C++ STL向量会保留太多的容量会花费大量内存吗?

我可能会冒险尝试将预留容量降低到预期的向量大小,并且会使程序运行稳定并可能更快?

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

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

+2

是的,它将始终有保留的内存量,除非该向量的实际大小超过该值,并且将像往常一样重新分配。至于其余的问题,这是由你来决定的。 –

+0

填充矢量后,您可以随时[缩小容量以适合尺寸](http://en.cppreference.com/w/cpp/container/vector/shrink_to_fit)。 –

回答

1

将矢量始终保存的内存,不释放资源和 成本种内存浪费?

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

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

我是否有冒险尝试将预留量(容量)降低到预计的 大小的矢量,并使程序运行稳定并可能更快?

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

您也可以致电shrink_to_fit以确保您的矢量正确使用它所需的内存量。

+0

这个答案不解析正确。你在说vector *会释放内存(“不,它不会”)。而且它这样做是因为它如何确保不会使指针和引用无效 – pm100

+1

我重新编写了它。 –