free() 实现何时应将内存还给 OS?
When should a free() implementation give memory back to the OS?
我正在为一个大学项目编写一个简单的 malloc 实现。其中一项任务是有时将释放的内存还给 OS(给出的示例是一个进程在一段时间内使用 1GB malloc 内存,之后它只使用 100MB 内存直到它终止),但是我不确定如何实施。我正在考虑定期检查进程分配的内存量和释放的内存量,如果可能的话,将一些释放的页面还给 OS,但我不确定这是否是一种有效的方法.
编辑:我第一次写这篇文章的时候并没有意识到,但是我的措辞太含糊了。对于“未使用的内存”,我指的是释放的内存。
向 OS 请求内存或将其返回是(相对)昂贵的操作,因为它们需要上下文切换 user/kernel 并返回。出于这个原因,在大多数实现中,malloc 调用仅请求大块并从这些块内部分配,并使用 空闲块列表 管理释放的内存。在那种情况下,当空闲列表中存在完整块时,它只会 returns 内存到 OS。
对于自定义实现,将内存返回给系统的规则取决于程序员(你...)。
我正在为一个大学项目编写一个简单的 malloc 实现。其中一项任务是有时将释放的内存还给 OS(给出的示例是一个进程在一段时间内使用 1GB malloc 内存,之后它只使用 100MB 内存直到它终止),但是我不确定如何实施。我正在考虑定期检查进程分配的内存量和释放的内存量,如果可能的话,将一些释放的页面还给 OS,但我不确定这是否是一种有效的方法.
编辑:我第一次写这篇文章的时候并没有意识到,但是我的措辞太含糊了。对于“未使用的内存”,我指的是释放的内存。
向 OS 请求内存或将其返回是(相对)昂贵的操作,因为它们需要上下文切换 user/kernel 并返回。出于这个原因,在大多数实现中,malloc 调用仅请求大块并从这些块内部分配,并使用 空闲块列表 管理释放的内存。在那种情况下,当空闲列表中存在完整块时,它只会 returns 内存到 OS。
对于自定义实现,将内存返回给系统的规则取决于程序员(你...)。