深入理解malloc/free以及malloc(0)空间分配

所有堆里的空闲块被串成一个空闲链表,malloc原理就是遍历这个空闲链表,找到第一个适合的块,并拆成两部分,一部分是要使用的内存,另一部分是剩下的空闲块,依旧串在空闲链表中。

如果malloc申请n byte,那么分配的将是比n byte大一些的内存,,一般是n+8 byte,因为,多的部分保存一个数据结构 struct mem_control_block 用来记录这个内存块的基本情况。

struct mem_control_block {
    int is_available;//可使用的
    int size;//大小
};

这个数据结构是分配内存的头
malloc()分配内存模型如下:
这里写图片描述

如果使用free函数,指针上移到改空间的头,根据mem_control_block得出需要释放多大的内存

这也就可以解释曾经看到的一个面试题malloc(0),是否合法,大小是多少
首先malloc(0),合法,那么分配的大小有人用length()来计算,长度自然是0,因为,返回指针指向位置在mem_control_block下方,分配的实际大小应该是mem_control_block的大小,也就是8 byte

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值