一、实验目的:
加深对可变分区存储管理的理解;
提高用C语言编制大型系统程序的能力,特别是掌握C语言编程的难点:指针和指针作为函数参数;
掌握用指针实现链表和在链表上的基本操作。
二、实验内容:
参照教材P123-P125的内容,编写一个C程序,用char *malloc(unsigned size)函数向系统申请一次内存空间(如size=1000,单位为字节),用循环首次适应算法、最佳适应算法和最坏适应算法,模拟可变分区存储管理,实现对内存区的分配和回收管理。
三、实验要求:
分配函数addr=(char *)lmalloc(unsigned size)和释放函数lfree(unsigned size,char *addr)的参数size和addr,要以键盘命令的形式输入,每次分配和释放后显示空闲分区表。
空闲分区表可采用结构数组的形式(最低要求)或双向链表的形式。
以上为实验的要求接下来来探讨如何的去实现,这里我用的是codeblocks加上notepad++,结合了很多人的代码,慢慢从小白蜕化····>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
物理分割
#include#include#include#include
我们引入这些库函数,要使用到malloc、cout、cin等等,我是从c转型的所以可能或许有些许的不同吧
假定我们的内存的分区可用空间为1000kb 那么我们需要定义一些预处理
#define maxsize 1000这个应该都可以看懂我就不过多的叙述了
定义数据结构
//结构的定义
typedef struct freePart{//空闲分区
long size;//分区的大小
long add;//分区的地址
int state;//状态
}elemType;
typedef struct twoNode{//双向链表
elemType data;
struct twoNode *pri;//前趋
struct twoNode *nex;//后驱
}twoNode,*linkTwoList;
typedef struct T{//排序的链表结构(单)
linkTwoList p;
struct T *next;
}T;
linkTwoList tou;//头节点
linkTwoList wei;//尾节点
T *headtou;
这些的定义我们可以参考一下书上的讲解,首先假设我们都实现了我们在main中需要怎么去写我们的代码呢?
我们得初始化我们的代码,因为我们的内存分区是由双向链表中的结构体实现的,所以我们首先得初始化我们的双向链表,头节点不需要指向任何东西,尾部的节点需要pri头节点,指向1000的空闲区,最后链接上一个null,这样我们的第一个就做好了。这个是我们的想法,具体的实现,之后再讲解。
当我们初始化完了之后我们会想着去显示在控制台上,那么我们也可以将我们的显示给定义为一个函数(方法),那么如何的去实现呢?
我们之前并未说明分区号因为我们是从0开始让它自动的递加