内存管理-内存分配

malloc是如何分配内存的?

malloc是如何分配内存的?

  • 如何用户分配的内存小于128KB,通过brk()申请内存;
  • 如果用户分配的内存大于128KB,通过mmap()申请内存;

其中通过brk申请的是堆内存,通过mmap申请的是文件映射区的内存。

为什么是以128KB为分界线?

malloc分配的是物理内存吗?

malloc()分配的是虚拟内存。

如果分配后的虚拟内存没有被访问的话,虚拟内存是不会映射到物理内存的,这样就不会占用物理内存。

只有在访问已分配的虚拟内存地址空间的时候,操作系统通过查找页表,发现虚拟内存对应的页没有在物理内存中,就会触发缺页中断,然后操作系统会建立虚拟内存和物理内存之间的映射关系。

malloc(1)会分配多大的虚拟内存?

free释放内存会归还给操作系统吗?

mmap缺点

brk缺点

brk分配和回收内存过程

free怎么知道要释放多大内存?

通过在申请的内存前追加头部信息,当使用free释放内存块的时候,对传入的地址向前偏移16个字节,取出头部信息分析内存块的大小,从而知道要释放多大的内存。

对于brk申请的内存块,使用free会发生什么?

对于mmap申请的内存块,使用free会发生什么?

理论上来说brk和mmap对应的free操作是不相同的,各自底层原理是什么?底层源码是什么?


内存管理-内存分配
http://example.com/2025/05/13/OperatingSystem/内存管理-内存分配/
作者
ZhangHangming
发布于
2025年5月13日
许可协议