当前位置: 代码迷 >> 综合 >> 《C 程序设计语言》 第八章 malloc 函数实现于内测管理
  详细解决方案

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

热度:20   发布时间:2024-01-20 02:31:12.0

这章举例实现了一个内存管理函数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 
  相关解决方案