释放块时,虚拟内存和物理内存之间的映射会丢失吗?

问题描述

假设我们要使用malloc从堆中分配一个块。分配较大的内存时,malloc在内部调用mmap,而对于较小的分配,malloc在内部调用brkWhy does malloc() call mmap() and brk() interchangeably?

请注意,使用sbrk()brk()时堆是连续的

假设我的分配是相对中等的,malloc在内部调用brk

假设我打了malloc(small); malloc(medium); free(medium)

根据本文The history of Unix's confusing set of low-level ways to allocate memory

如果您释放()d正确的东西以在中断的顶部创建一块未使用的空间,则malloc()和公司可能最终会调用brk()sbrk()来缩小程序的中断并将内存还给操作系统。

由于空闲介质块是最后一个,因此会将内存分配给OS。

以下是我的问题:

第一季度,我对“将内存返还给操作系统”这一说法的理解是: 如果释放了虚拟内存和物理内存之间的空闲块映射,则其他进程可以使用该空闲块最初占用的物理内存。我的理解正确吗?

第二季度,我致电malloc(medium); malloc(small); free(medium) 由于最后还有一个分配的块,虚拟内存和物理内存之间的空闲块映射是否仍然存在?其他进程可以使用此空闲块的物理内存吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)