文档介绍:内存管理器 1
一、实验目的 1
二、实验设计 1
三、源程序清单和说明 2
四、算法及关键数据结构设计 14
五、实验过程中间结果屏幕截图 17
六、疑难解惑及经验教训 21
内存管理器
实验目的
设计和实现关于内存管理的内存布局初始化及内存申请分配、内存回收等基本功能操作函数尝试对用256MB的内存空间进行动态分区方式模拟管理。内存分配的基本单位为1KB,同时要求支持至少两种分配策略,并进行测试和对不同分配策略的性能展开比较评估。
实验设计
1、设计一定的数据结构以描述256MB内存空间的使用状况,并设计和构建函数void ChuShiHuaNC(DIZHI zKS_KYNC, DIZHI zJS_KYNC)实现内存布局的初始化。假定内存空间的低址部分56MB(即0~56M-1)作为系统区和不参与分配过程。
2、设计和实现内存申请分配函数DIZHI ShenQingNC(unsigned long zDX),内存分配的基本单位为1KB,同时要求支持至少两种分配策略(如首次适应、循环首次适应、最佳适应、最坏适应等),若分配失败则返回NULL。
3、设计和实现内存回收函数void HuiShouNC(DIZHI zKSDZ) ,若回收分区与其它空闲分区相邻接,则采取合并措施。
4、基于不同的内存分配策略形成不同版本的内存管理器,并根据内存平均利用率和分配查找分区比较次数等指标展开测试和对不同分配策略的内存管理器性能进行评估。
5、不妨设计测试例程框架:
循环
{
①产生随机数,并根据该值确定是申请内存还是回收内存;
②若是申请内存,还需进一步产生申请内存大小(服从正态/均匀分布);若是回收内存还需产生随机数和选择回收区;
③收集测试数据用于性能评价;
}
性能指标计算
6、分析性能测试数据,并借用图形如曲线方式来描述平均内存申请大小与平均内存利用率及平均查找步骤之间的关系。
源程序清单和说明
//
#include <>
#include <>
#include <>
#include <>
enum { ADDR = 0, TOTAL = 262144, MAX = 20000, MIN = 100, NF = 1, BF = -1, FULL = 1, FREE = 0, N = 2000 };
/*空闲分区链*/
struct node
{
struct node* prev;
struct node* next;
int number;
int addr;
int size;
int status;
};
typedef struct node block;
int random ( int s, int e );
double rate ();
void ChuShiHuaNC ();//内存初始化函数
void view();
int ShenQingNC ();//内存申请函数
int nextfit ( int size );//循环首次适应算法
int bestfit ( int size );//最佳适应算法
void HuiShouNC ();//内存回收函数
void convert ();
void test ();
void prompt ();
//
#include ""
#include ""
extern int occupied, count, compare, algo;
extern block *head, *tail, *last;
/*内存空间初始化函数*/
void ChuShiHuaNC ()
{
block *work, * temp;
occupied = 0; //初始化已经分配的内存大小
count = 0; //初始化已经分配的内存块数
compare = 0;
/*将空闲分区链初始化*/
if ( head != NULL )
{
work = head->next;
while ( work != head )
{
temp = work;
work = work->next;
free(temp);
}
free(head);
}
head = (block*)malloc(sizeof(block));
tail = (block*)malloc(sizeof(block));
last = tail;
head->pre