实现一个malloc内存分配器

参照https://zhuanlan.zhihu.com/p/367060283

内存申请与释放

程序员经常使用的内存申请方式被称为动态内存分配
我们需要动态的去进行内存分配与释放是因为不能提前知道程序到底需要使用多少内存,有当程序真的运行起来后我们才知道。
如果能提前知道我们的程序到底需要多少内存,那么直接知道告诉编译器就好了,这样也不必发明malloc等内存分配器了。

void main()
{
	int n;
	scanf("%d",&n);
	char *str = (char*)malloc(sizeof(char)*n);
}

内存分配与释放相关要点

1、我们怎么知道有哪些内存块是空闲的呢?(怎么区分空闲内存块与已分配内存块)
2、我们该选择什么样的空闲内存块给到用户?(空闲内存块有很多)
3、分配出去内存后,空闲内存块剩余的空间该怎么处理?
4、用户归还的内存该怎么处理?

内存分配与释放

内存分配:
将空闲内存块进行划分,前一部分设置为已分配,返回给内存申请者使用,后一部分变为一个新的空闲内存块。
内存释放:
释放内存时不需要指定大小,因为我们从要释放的指针地址上移,通过header就能知道该内存块的所有信息。
内存合并:
应用程序向我们的malloc释放内存时,我们查看一下相邻的内存块是否是空闲的,如果是空闲的话我们需要合并空闲内存块。高效地合并空闲内存块,需要header与footer,上一内存块的footer和下一个内存块的header是相邻的。因此我们只需要在当前内存块的位置向上移动4直接就可以等到上一个内存块的信息,这样当我们释放内存时就可以快速的进行相邻空闲内存块的合并了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值