如何从std :: vector中恢复内存?

时间:2012-01-26 15:55:04

标签: c++ memory stl vector

  

可能重复:
  How to downsize std::vector?
  C++ vector::clear

当我在一些大尺寸的矢量上调用vector<double>::clear()时,我看不到内存在任务管理器/性能中返回到系统。

显然这是因为容器expects you will use that same memory again。一旦任务完成,我将不会再次使用该内存,并且内存将更好地返回到系统。

当我们在vector<double> * v上使用delete /调用v之类的指针时,有没有办法确保内存立即返回系统 以外的想将内存返回系统吗?

3 个答案:

答案 0 :(得分:11)

C ++ 11引入了应该这样做的shrink_to_fit方法(请注意,它不是严格保证可以工作,但它很可能会这样做):

your_vector.clear();
your_vector.shrink_to_fit();

如果您不能使用C ++ 11功能,那么您可以使用以下技巧,它将清除您的向量并释放它使用的所有内存:

std::vector<double>().swap(your_vector);

也就是说,即使向量释放它分配的内存,分配器也不会将内存返回给操作系统。但至少这个内存将可用于您的应用程序的其他部分。

答案 1 :(得分:2)

您可以使用交换技巧来执行此操作:

vector<double>().swap(v);

这会创建一个新的空向量,然后将其内容与v交换,然后将为空,并且将释放它所拥有的内存。

答案 2 :(得分:0)

你可以将你的矢量放在一个块中,比如

...//your code
{
    vector<double> v(10);
    //use it
}
...//your other code

通过这种方式,你的矢量“v”将被销毁,内存将在范围的最后自动释放(在结束}之后)。