使用std :: map时内存增长

时间:2015-10-23 05:32:03

标签: c++

我用这段代码观察内存增长。但它应该显示没有内存增长,因为所有创建的对象都被删除了。

我实现了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();

1 个答案:

答案 0 :(得分:2)

您可能需要阅读http://www.gnu.org/software/libc/manual/html_node/Freeing-after-Malloc.html#Freeing-after-Malloc。 特别是最后几段:

  

有时,free实际上可以将内存返回给操作系统   并使过程更小。通常,它所能做的只是稍后允许   调用malloc来重用空间。与此同时,空间仍然存在   在您的程序中作为malloc内部使用的自由列表的一部分。

如果要将大块内存返回给操作系统,请考虑使用mmap