《C 程序设计语言》 第八章 malloc 函数实现于内测管理

本篇博客探讨了《C程序设计语言》中第八章关于malloc函数的实现,通过创建一个环链表来管理内存区块,利用全局指针跟踪上次操作的节点。malloc函数在找不到合适大小的内存块时,会调用morecore函数向操作系统请求更多内存。内容包括内存区块的结构定义、字节对齐以及malloc的详细实现流程。
摘要由CSDN通过智能技术生成

这章举例实现了一个内存管理函数malloc 将系统以来的部分和非系统依赖的部分进行分离


malloc内部管理的内存区块实际上是一个环链表,用一个全局指针纪录上一次操作的节点,用户遍历时判断是否已经遍历一周。

每个链表节点又一个头部组成,纪录了下一个区块的地址和整个区块的尺寸

定义如下

typedef long Align;

union header{
    struct {
        union header * ptr;
        unsigned size;
    } s;
    Align x; 
};

typedef union header Header;



Align是使得申明出来的区块具有字节对齐属性

接下来是malloc函数的实现

首先需要一个base 节点提供初始化使用

和一个全局指针指向上一次操作的节点

static Header * freep = NULL;
static Header base;

接下来是malloc函数,遍历各个区块如果尺寸大于需要尺寸就进行分割。正好相等就返回改区块

如果遍历一周没有找到合适的尺寸就调用morecore函数像操作系统申请内存(该函数具有系统依赖)

void * malloc(unsigned nbytes)
{
    Header *p, *prevp;
    Header *morecore(unsigned);
    unsigned nunits;

    nunits = (nbytes 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值