Linux进程的内存管理之malloc和mmap

文章详细介绍了Linux进程内存管理中,动态内存分配的两种主要方式——通过brk和mmap。malloc函数根据内存分配的size选择合适的分配策略,小于128KB时使用brk,大于则使用mmap。brk通过调整heap段边界进行内存扩展或收缩,而mmap则在堆和栈之间寻找空闲内存进行映射。文章还提到了内存对齐、物理内存的延迟分配以及mmap在匿名和文件映射中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过《Linxu进程的内存管理》,我们知道了进程内存的最小单位是vma,根据不同的用处又划分了不同类型的vma,比如

  • heap: 动态分配和释放的内存
  • stack: 存放局部变量和实现函数调用
  • mmap:文件区间映射到虚拟地址空间的内存映射
  • text,data,bss

这篇我们就看下进程动态申请的内存,我们知道进程动态申请内存的函数是malloc,这篇讲下其涉及到的vma,即heap和mmap。

malloc

在linux标准libc库种,malloc函数的实现会根据分配内存的size来决定使用哪个分配函数,当size小于等于128KB时,调用brk分配;当size大于128KB时,调用mmap分配内存。size可由M_MMAP_THRESHOLD选项调节。如下图:

图片

  • sys_brk分配过过程主要是调整brk位置
  • sys_mmap分配过程中主要是在堆和栈中间(memory mapping segment)找一段空闲的虚拟内存

图片

brk

堆内存是由低地址向高地址方向增长。分配内存时,将h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值