2012-01-26 42 views
1

可能重复:
How to downsize std::vector?
C++ vector::clear如何从std :: vector中恢复内存?

当我打电话与大尺寸有些矢量vector<double>::clear(),我没有看到内存返回到系统中的任务管理器/性能。

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

是否有办法确保立即内存返回到系统,除/使用像vector<double> * v指针调用vdelete,当我们想要的记忆又回到了这个系统?

+1

已经问[C++向量::明确] [1] [1]:http://stackoverflow.com/questions/3477715/c-vectorclear – Andrew

+4

你真的不应该使用任务管理器这一点。 – 2012-01-26 16:11:22

+1

几乎所有人都回答这个问题只会让'vector'将内存释放回内存分配器。您的标准库和操作系统何时将未分配的内存从进程中释放回系统时使用的标准完全是另一回事,所以即使它运行正常,您也不一定能够在任务管理器中看到它。 –

回答

11

C++ 11(请注意,这不是严格保证工作,但它很可能就是这样):

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

如果您不能使用C + +11功能,那么你可以使用下面的技巧,它会清除你的载体和释放所有的内存,它使用:

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

这就是说,它可能是,即使载体将释放它分配任何内存,分配器赢了将内存回馈给操作系统。但至少该内存将可用于您的应用程序的其他部分。

+0

GRR ..(代表“grrreat答案!”) – bobobobo

+0

实际上,根据[这里](成员http://bytes.com/topic/c/答案/ 620047-resize-clear-vector),如果你将范围块放在临时文件中,它实际上应该清除内存 – bobobobo

0

你可以把你的矢量的块里面,像这样

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

这样你的载体“V”将被销毁,内存会自动在范围年底发布(截止后})。介绍shrink_to_fit方法应该这样做

+0

无可以做的,先生.. Vector的对象 – bobobobo

2

你可以使用交换技巧来做到这一点:

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

这将创建一个新的空载体,然后交换它的内容用v则v是空的,它曾经拥有的内存会。释放。