- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实用标准文案
精彩文档
动
态
内
存
分
配
算
法
实
验
报
告
院系:计算机与通信工程学院
班级:计科08-1班
姓名:胡太祥
学号:200807010112
一.实验题目:动态内存分配算法
二、实验目的
深入了解动态分区存储管理方式内存分配与回收的实现
三、实验要求
熟悉存储管理中动态分区的管理方式及Windows环境下,VC++程序设计方法
四、实验内容
1,确定定内存空闲分配表和进程内存分配表
2,采用首次适应算法完成内存空间的分配
3,采用最佳适应算法完成内存空间的分配
4,采用最坏适应算法完成内存空间的分配
5,实现内存回收功能
五、实验结果
首次适应算法结果
最佳适应算法
最坏适应算法
六、实验总结
首次适应算法:从表头指针开始查找课利用空间表,将找到的第一个大小不小于“请求”的空闲块的一部分分配给用户。
最佳适应算法:将可利用空间表中一个大小不小于“请求”且最接近“请求”的空闲块的一部分分配给用户。
最坏适应算法:将可利用空间表中一个大小不小于“请求”且是链表中最大的空闲块的一部分分配给用户。
以上是动态内存分配的三种算法思想,算法采用数据结构中的双向链表实现。
附录(算法代码):
实用标准文案
精彩文档
#includeiostream.h
#includestdlib.h
#define Free 0 //空闲状态
#define Used 1 //已用状态
#define OK 1 //完成
#define ERROR 0 //出错
#define MAX_length 32767 //最大内存空间为32767KB
typedef int Status; //typedef将标识符Status定义成一个数据型标识符
int n = 0;
typedef struct freearea { //定义一个结构体freearea,并对这个空闲分区进行说明
int ID; //分区号
long size; //分区大小
long address; //分区地址
int state; //当前状态
} ElemType;
typedef struct DuLNode { //double linked list // 线性表的双向链表存储结构
ElemType data;
struct DuLNode *prior; //前趋指针
struct DuLNode *next; //后继指针
} DuLNode, *DuLinkList;
DuLinkList free_list; //空闲链表
DuLinkList alloc_list; //已分配链表
Status alloc(int);//内存分配
void free_memory(int ID, int method); //内存回收
Status first_fit(int ID, int size); //首次适应算法
Status best_fit(int ID, int size); //最佳适应算法
Status worst_fit(int ID, int size); //最坏适应算法
void first_fit_insert(DuLNode *insert); //首次适应插入排序
void best_fit_insert(DuLNode *insert); //最佳适应插入排序
void worst_fit_insert(DuLNode *insert); //最坏适应插入排序
DuLNode *independent_node(DuLNode *node); //断开节点node与相邻节点的联系,使其孤立
//将节点node分割,返回分配的节点信息,node为剩余内存信息
//node为双指针形式,因为可能需要对node的值进行修改
DuLNode *slice_node(DuLNode **node, int ID, int size);
void show();//查看分配
Status Initblock();//开创空间表
Status Initblock()//开创带头节点的内存空间链表,头节点不用
{
alloc_list = (DuLinkList)malloc(sizeof(DuLNode));
free_list = (DuLinkList)malloc(sizeof(DuLNode));
//
文档评论(0)