深入理解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()分配内存模型如下:
深入理解malloc/free以及malloc(0)空间分配_第1张图片

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

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

你可能感兴趣的:(c++)