当前位置: 首页 > 面试题库 >

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

谷梁楚青
2023-03-14
问题内容

当我在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!\n");

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

谢谢。


问题答案:

内存分配到堆上。

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

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

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

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



 类似资料:
  • 问题内容: 我对JVM内存管理(至少对于SUN的内存管理)有疑问。 我想知道如何控制JVM将未使用的内存发送回OS(以我的情况为Windows)的事实。 我编写了一个简单的Java程序来说明我的期望。使用- Dcom.sun.management.jmxremote选项运行它,以便例如也可以使用jconsole监视堆。 使用以下程序: 一旦第一个GC完成(预期),内部堆就释放了,但是内存仅从第三个

  • 看js 的原生库函数,比如:parseInt(),为什么库函数只写了函数名和参数和返回类型, 没有写 {要操作的内容体} 呢?

  • 问题内容: 我是一名编程初学者,对函数的返回值有疑问。 我正在学习Java。 我已经附上了我的书中具有经典选择排序功能的代码。 现在显然来自本书的代码可以正常工作。但是,主要功能中的以下三行是我的问题的基础: int [] a = new int [] {1,9,2,8,3,7,4,6​​,5}; 排序(a); if(ascending(a))System.out.println(“ Works”

  • 问题内容: 我有一个箭头函数,看起来像这样(简化): 但是当我调用它时,我得到: 为什么? 例: ( 注意: 对于上述带有箭头功能的 特定 问题,这是一个干净,规范的重复目标。) 问题答案: 当您使用箭头函数的函数主体版本(带有)时,没有暗示。您必须指定它。当您使用 简洁 主体(no )时,主体表达式的结果将由函数隐式返回。 因此,您可以使用显式的方式编写该代码: 或简洁的主体: 例子: 略 切线

  • 问题内容: 我正在尝试使用一个字段来获取手动输入,然后使用该数据。 我发现的所有资料都声称我应该使用该函数,但是我还没有找到一个简单的可运行的迷你示例,因此无法正常工作。 我希望有人可以给我打电话,告诉我我做错了什么。这是一个迷你文件: 这给了我一个我可以输入的字段,但是一旦输入数据我就什么也不能做。 我怀疑我的代码不起作用,因为最初它是空的。但是,一旦输入了输入数据,我该如何访问呢? 问题答案:

  • 问题内容: 我正在通过LPTHW,遇到了一些我听不懂的东西。您何时会需要布尔值或返回布尔值以外的其他值?LPTHW文本指出所有语言(如python)都具有此行为。他是说解释型语言还是编译型语言,还是鸭子类型的还是静态类型的语言? 我运行了以下代码: 请帮助我了解这里发生了什么。 根据文档:http : //docs.python.org/2/library/stdtypes.html 除非另有说明