malloc底层分配的两种机制

一、sbrk/brk实现

   (1)其实brk和sbrk是通过指针来实现的,这种实现方式是在用户申请相对而言比较小的内存时用到的

        申请: 假如现在用户想申请8个字节的空间,那么系统就会一次性给用户空间分配128k(其实是132k,但是这个值也不是固定的,如果你申请的稍微较大的时候,内核会给你再分配比这大的空间的,所以说内核要根据用户申请的具体情况来定,这个值并不唯一)个大小的空间,这些空间申请来先是存在C库中的,它并不是说就全部都给你了,它只是把你需要的那部分划分给你,剩下的在C库中保存,等到你下次再申请的时候(相对较小的)就不用再到内核空间中申请了,直接C库给你分配就行,也提高了效率

(这只是4G空间中,堆区的那部分呢空间图)当每次申请的时候,brk就会向上移动,如果它下面有内存被free了,那也是不能被释放的,因为brk是不能够回退的,因为它指向的那块空间可能还在被用

        释放:当用户在free的时候,其实并没有还给内核空间,而是还在用户空间中,C库中会把每次释放的再继续合并在一起,当下次用户再来申请的时候如果之前剩余的不够还可以从这些拼接的空间中取。

二、Mmap映射

   这是当用户一次要申请很大空间的时候(比如1M&#

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值