free() 实现何时应该将内存返还给操作系统?

问题描述

我正在为一个大学项目编写一个简单的 malloc 实现。其中一项任务是有时将释放的内存返还给操作系统(给出的示例是在一段时间内使用 1GB malloc 内存的进程,之后它只使用 100MB 内存直到它终止),但是我不是确定如何实现这一点。我想定期检查进程分配的内存量和释放的内存量,如果可能,将一些释放的页面返回给操作系统,但我不确定这是否是一种有效的方法

编辑:我第一次写这篇文章时没有意识到,但我的措辞方式太模糊了。 “未使用的内存”是指已释放的内存。

解决方法

向操作系统请求内存或将其返回是(相对)昂贵的操作,因为它们需要上下文切换用户/内核并返回。出于这个原因,在大多数实现中,malloc 调用仅请求大块并从这些块内部分配,并使用 空闲块列表 管理释放的内存。在这种情况下,它仅在空闲列表中存在完整块时才将内存返回给操作系统。

对于自定义实现,将内存返回给系统的规则取决于程序员(您...)。