gpt4 book ai didi

c++ - 使用 std::map 时内存增长

转载 作者:行者123 更新时间:2023-11-30 03:48:13 29 4
gpt4 key购买 nike

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

我已经为 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();

最佳答案

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

Occasionally, free can actually return memory to the operating system and make the process smaller. Usually, all it can do is allow a later call to malloc to reuse the space. In the meantime, the space remains in your program as part of a free-list used internally by malloc.

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

关于c++ - 使用 std::map 时内存增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33295463/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com