malloc,calloc 和 realloc 的实现原理

malloc,calloc 和 realloc是应用层用于开辟内存的三个函数。

  • 实现原理

malloc / calloc 函数的实现原理:它维护一个可用内存链表(即所谓空闲链表)

调用时,它在该链表中寻找一个满足用户请求所需要的内存块,这样就会出现三种情况:

  1. 如果找到一块与用户请求所需要大小相同的内存块,那就将该块内存返还给用户。
  2. 如果找到一块比用户请求所需要大小更大的内存块,则将该内存块一分为二(一块的大小与用户申请的大小一样,另一块就是剩下的字节),将分配给用户的那块内存传递给用户,将剩下的另一块返还到链表上。用户使用完,调用free函数时,它将用户释放的内存块连接到链表上。这样就产生一个问题:使用到最后的时候,空闲链表会被切成很多的小内存片段。
  3. 如果这时用户申请一个大内存块,那么空闲链上可能没有满足用户要求的内存片段,于是malloc函数请求延时,开始检查空闲内存链表并进行整理,将相邻小空闲块合成较大的内存块。

realloc 是从堆空间上分配内存,当扩大一块内存空间时,realloc试图直接从现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平;如果后面的字节不够,那么就使用堆上第一个足够满足要求的自由空间块,现存的数据拷贝到新的位置上,而老块则放回堆空间,这句话传递的一个很重要的信息就是数据可能被移动

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值