gpt4 book ai didi

c++ - 为什么 free() 函数不将内存返回给操作系统?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:43:58 28 4
gpt4 key购买 nike

我在Linux下使用top终端程序时,看不到free的结果。

我的期望是:

  1. 免费 map 和 list 。

  2. 我可以在顶部(Linux 函数)或 /proc/meminfo 看到的内存使用情况变得比过去更小。

  3. sleep 开始。

  4. 程序退出。

但是当程序结束时,内存的使用量只会变小。

能解释一下自由函数的逻辑吗?

下面是我的代码。

for(mapIter = bufMap->begin(); mapIter != bufMap -> end();mapIter++)
{
list<buff> *buffList = mapIter->second;
list<buff>::iterator listIter;
for(listIter = buffList->begin(); listIter != buffList->end();listIter++)
{
free(listIter->argu1);
free(listIter->argu2);
free(listIter->argu3);
}
delete buffList;
}
delete bufMap;

printf("Free Complete!\n");

sleep(10);
printf("endend\n");

谢谢。

最佳答案

内存分配到 heap 上.

当您在程序中请求一些内存时(使用 new() 或 malloc() 等)您的程序从其堆中请求一些内存,而堆又从操作系统中请求它{1}。由于这是一项昂贵的操作,它会从操作系统获取一大块内存,而不仅仅是您要求的内存。内存管理器将它得到的所有东西都放入堆中,只返回给你你要求的可能很少的数量。当您 free() 或 delete() 此内存时,它只是返回到堆,而不是操作系统。

在您的程序退出之前,该内存不会返回给操作系统是绝对正常的,因为您稍后可能会请求更多内存。

如果您的程序设计依赖于此内存的回收,则可以使用运行和退出的多个程序拷贝(通过 fork()~ing)来实现。

{1} 堆在程序启动时可能是非空的,但假设它不是说明我的观点。

关于c++ - 为什么 free() 函数不将内存返回给操作系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52417318/

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