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

2024-10-21 09:14:00
admin
原创
168
摘要:问题描述:当我在Linux上使用顶级终端程序时,我看不到免费的结果。我的期望是:免费地图和列表。我可以在顶部看到内存使用情况(Linux 功能)/proc/meminfo比过去更小。睡眠开始了。程序退出。但只有当程序结束时内存的使用量才会变小。你能解释一下自由函数的逻辑吗?下面是我的代码。for(mapIte...

问题描述:

当我在Linux上使用顶级终端程序时,我看不到免费的结果。

我的期望是:

  1. 免费地图和列表。

  2. 我可以在顶部看到内存使用情况(Linux 功能)/proc/meminfo
    比过去更小。

  3. 睡眠开始了。

  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!
");

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

感谢您。


解决方案 1:

内存被分配到堆上。

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

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

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

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

解决方案 2:

堆通常使用操作系统函数来管理其内存。堆的大小可能在程序创建时就已固定,也可能允许其增长。但是,当调用 free 函数时,堆管理器不一定将内存返回给操作系统。释放的内存只是供应用程序后续使用。因此,当程序分配然后释放内存时,从操作系统的角度来看,内存的释放通常不会反映在应用程序的内存使用量中。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1109  
  IPD(Integrated Product Development,集成产品开发)流程是一种广泛应用于高科技和制造业的产品开发方法论。它通过跨职能团队的紧密协作,将产品开发周期缩短,同时提高产品质量和市场成功率。在IPD流程中,CDCP(Concept Decision Checkpoint,概念决策检查点)是一个关...
IPD培训课程   73  
  研发IPD(集成产品开发)流程作为一种系统化的产品开发方法,已经在许多行业中得到广泛应用。它不仅能够提升产品开发的效率和质量,还能够通过优化流程和资源分配,显著提高客户满意度。客户满意度是企业长期成功的关键因素之一,而IPD流程通过其独特的结构和机制,能够确保产品从概念到市场交付的每个环节都围绕客户需求展开。本文将深入...
IPD流程   63  
  IPD(Integrated Product Development,集成产品开发)流程是一种以跨职能团队协作为核心的产品开发方法,旨在通过优化资源分配、提高沟通效率以及减少返工,从而缩短项目周期并提升产品质量。随着企业对产品上市速度的要求越来越高,IPD流程的应用价值愈发凸显。通过整合产品开发过程中的各个环节,IPD...
IPD项目管理咨询   71  
  跨部门沟通是企业运营中不可或缺的一环,尤其在复杂的产品开发过程中,不同部门之间的协作效率直接影响项目的成败。集成产品开发(IPD)作为一种系统化的项目管理方法,旨在通过优化流程和增强团队协作来提升产品开发的效率和质量。然而,跨部门沟通的复杂性往往成为IPD实施中的一大挑战。部门之间的目标差异、信息不对称以及沟通渠道不畅...
IPD是什么意思   66  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用