为什么free()函数不将内存返回给操作系统?
当我在Linux上使用顶级终端程序时,看不到免费的结果。
免费地图和清单。
我可以在顶部看到内存使用情况(Linux函数),或者
/proc/meminfo
变得比过去更小。睡眠开始了。
程序退出。
但是,只有在程序结束时,内存使用量才会变小。
您能解释一下自由功能的逻辑吗?
下面是我的代码。
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");
谢谢。
回答:
内存分配到堆上。
当您在程序中请求一些内存时(使用new()或malloc()等),您的程序会从其堆中请求一些内存,而堆又会从操作系统{1}中请求它。由于这是一项昂贵的操作,因此它会从OS中获取大量内存,而不仅仅是您的要求。内存管理器将所有内容放入堆中,只是将您所需要的少量返回给您。当您释放()或删除()该内存时,它只会返回到堆,而不是操作系统。
在您的程序退出之前,不将该内存返回给操作系统是绝对正常的,因为您稍后可能会请求更多的内存。
如果您的程序设计依赖于此内存,那么可以使用运行和退出的程序的多个副本(通过fork()〜ing)来实现。
{1}程序启动时堆可能是非空的,但是假设它不能说明我的观点。
以上是 为什么free()函数不将内存返回给操作系统? 的全部内容, 来源链接: utcz.com/qa/405939.html