外行救助。
container分配的内存如何才能彻底释放?
测试了很多办法,vector,set,map一类的container,不论是clear,erase,还是swap,
delete都不会将内存返回系统。
查资料说这样优化是为了速度更快,因为每次分配内存再释放内存很慢。
但是如果这样,碰巧建了一个超大的临时map,内存就是被一直占着。清空后下次再用的时候,确实内存不会增加,但是也不减少,就这么一直占着。
请问如何才能将内存返回给OS?
C++11. OS Ubuntu 18.
代码大概是这个样子
class C {
vector<int> a;
vector<int> *b;
C(){
b= new vector<int>();
for (int i=0;i<10000000000;i++){
a.push_back(i);
b->push_back(i);
}
}
~C(){
vector<int>().swap(a);
delete b;
}
};
main(){
//check memory here
for (int i=0;i<10;i++){
C *c = new C();
delete c;
}
//check memory here
}
--
FROM 159.226.67.*