c – 为什么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");

谢谢.

解决方法:

内存分配到heap.

当您在程序中请求一些内存时(使用new()或malloc()等).您的程序从其堆中请求一些内存,而这些内存又从操作系统{1}请求它.由于这是一项昂贵的操作,因此从操作系统中获取大量内存,而不仅仅是您要求的内存.内存管理器将所有内容放入堆中,只需向您返回您要求的少量内容.当你释放()或删除()这个内存时,它只会返回堆,而不是操作系统.

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

如果您的程序设计依赖于这个内存被回收,那么可以使用程序的多个副本(通过fork()〜ing)来运行和退出.

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

上一篇:linux手动测试 rsync 的同步情况


下一篇:postgresql – 是否有安装中Postgres升级的版本历史记录?