hw9.20 分离适配式 malloc free 实现 思想猜测

这篇博客探讨了分离适配式malloc free的实现,包括只有一个空闲链表时的首次适配和归还块时的合并策略。在分离适配中,维护了多个固定大小的空闲链表,分配时按需选择合适链表,归还时判断并合并块。重点在于如何正确地链接块到不同大小的空闲链表。作者欢迎指正。
摘要由CSDN通过智能技术生成

首先,先了解下书中所介绍的采用隐式空闲链表的简单适配器实现贴出来供大家参考,在Ubandu下编译成功。


#include <stdlib.h>
#include <unistd.h>

#define WSIZE 4
#define DSIZE 8
#define CHUNKSIZE (1<<12)
#define MAX(x,y) ((x)>(y)?(x):(y))


#define PACK(size,alloc)  ((size) | (alloc)) 
#define GET(p) (*(unsigned int *)(p))
#define PUT(p,val) (*(unsigned int *)(p) = (val))

#define GETSIZE(p) (GET(p)& ~0x7)
#define GETALLOC(p) (GET(p) & 0x1)


#define HDRP(p) ((char*)(p)-WSIZE)
#define FTRP(p) ((char*)(p) + GETSIZE(HDRP(p)) - DSIZE )

#define NEXTBLCK(p) ((char*)(p) + GETSIZE(HDRP(p)))
#define PREVBLCK(p) ((char*)(p) - GETSIZE( ((char*)(p) - DSIZE)))



static char* heap_listp;

static char* last_listp;

static void* coaleace(void* bp){
	size_t nextAlloc = GETALLOC(HDRP(NEXTBLCK(bp)));
	size_t prevAlloc = GETALLOC(FTRP(PREVBLCK(bp)));
	size_t size = GETSIZE(HDRP(bp));

	if(nextAlloc && prevAlloc)
		re
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值