实现malloc-free用来管理64k内存
问题的引入 实现malloc-free,用来管理64k的内存。这是一道面试题,也是一道很好的设计题 解决思路 1.malloc(size_t size), free(void *p)是用户api, 释放的时候需要知道释放空间的大小,并且需要放入到一个空闲链表里面去,可以这样设计 typedef struct item{ uint16_t size; union { char mem[4]; struct item *next; }mn; }__attribute__ ((packed)) item; 2.采用union,如果分配给用户,则为可以使用内存,加入到空闲链表,则为链表指针。这里的指针大小为4个字节,因此分配给用户的最小长度为4字节,如果用户申请的长度小于4个字节,应该分配4个字节。 如果为16位机器,则应该将联合体改为union {char mem[2];struct item *next;}mn; 3.为了避免内存碎片,这里需要将释放的两个相邻的区域拼接成一个较大的空间,设计一个splice函数。 4.申请,首先找到第一个比申请内存大的空间,然后划分一部分分配给用户,划分函数为cut. 实现 define ITEM_SIZE (sizeof(item) - sizeof(void *)) typedef struct item{ uint16_t size; union