我用这段代码观察内存增长。但它应该显示没有内存增长,因为所有创建的对象都被删除了。
我实现了MyObj的析构函数,并使用gdb观察到迭代地图实际调用了析构函数。 有人可以解释我做错的地方。
map<int,MyObj*> myMap;
for(int i = 1; i<= 500000; i ++)
{
MyObj* pMyObj = new MyObj;
myMap.insert(pair<int,MyObj*>(i,pMyObj));
}
map<int,MyObj*>::iterator ite = myMap.begin();
while (ite != myMap.end())
{
delete ite->second;
ite++;
}
myMap.clear();
答案 0 :(得分:2)
您可能需要阅读http://www.gnu.org/software/libc/manual/html_node/Freeing-after-Malloc.html#Freeing-after-Malloc。 特别是最后几段:
有时,free实际上可以将内存返回给操作系统 并使过程更小。通常,它所能做的只是稍后允许 调用malloc来重用空间。与此同时,空间仍然存在 在您的程序中作为malloc内部使用的自由列表的一部分。
如果要将大块内存返回给操作系统,请考虑使用mmap
。