问题描述
假设我们要使用malloc
从堆中分配一个块。分配较大的内存时,malloc
在内部调用mmap
,而对于较小的分配,malloc
在内部调用brk
。
Why 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 (将#修改为@)