当我在一些大尺寸的矢量上调用vector<double>::clear()
时,我看不到内存在任务管理器/性能中返回到系统。
显然这是因为容器expects you will use that same memory again。一旦任务完成,我将不会再次使用该内存,并且内存将更好地返回到系统。
当我们在vector<double> * v
上使用delete
/调用v
之类的指针时,有没有办法确保内存立即返回系统 以外的想将内存返回系统吗?
答案 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”将被销毁,内存将在范围的最后自动释放(在结束}
之后)。