我正在用这段代码观察内存的增长情况。但它应该显示没有内存增长,因为所有创建的对象都被删除。使用std :: map时的内存增长
我已经实现了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();
这里有很多重复的SO(并且应该很容易通过简单的搜索在互联网上找到解释)。 “问题”的一个可能原因是操作系统不必取消映射内存页面,以防您的进程再次需要它们。如果操作系统需要其他地方的页面,它将取消映射它们,你的“增长”将消失。 –
@JoachimPileborg如果我做了删除写之后,它永远不会发生。感谢您的快速回复。 –
@ChiefTwoPencils在执行这段代码之前和之后.. –