- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验7 内存块的申请与释放
实验七 内存块的申请与释放
???
[实验目的]
1. 掌握内存动态分区的实现方法
2. 进一步掌握内存块的分配策略
3. 掌握内存块申请与释放的算法与实现
[实验内容]
本次实验是模拟实现内存的动态分区的分配算法。假设内存的大小为100KB。 分别使用首次适应算法,最佳适合算法去分配和释放内存空间,并显示内存的分配情况。
要求:
i) 在读完程序后,将函数FirstFit_new()补充完整,写在实验报告上;
ii) 运行程序,将测试结果写在实验报告上。
[程序]
/**------------------------------------------------------
进入程序后可以根据菜单选项进入不同的模块
1.使用首次适应算法分配空间
2.使用最佳适应算法分配空间
3.释放一块空间
4.显示内存分配情况
5.退出系统
----------------------------------------------------------**/
#include stdio.h
#include stdlib.h
#include string.h
#include conio.h
#define MEMSIZE 100 /*定义内存大小为100*/
#define MINSIZE 2 /*如果小于此值 将不再分割内存*/
typedef struct _MemoryInfomation{/* 内存空间分区表 结构*/
int start; /*起始地址*/
int size; /*大小*/
char info; /*状态 F:空闲(Free) U:占用(Used) E 结束(end)*/
}MEMINFO;
MEMINFO MemList[MEMSIZE]; //内存空间信息表
void Display();
/*--------------------------------------------------------
函数名:InitALL()
功 能:初始化所有变量
--------------------------------------------------------*/
void InitAll(){
int i;
MEMINFO temp={0,0,e};
for(i=0;iMEMSIZE;i++) //初始化空间信息表
MemList[i]=temp;
MemList[0].start=0; //起始地址为0
MemList[0].size=MEMSIZE;//空间初始为最大的
MemList[0].info=f; //状态为空闲
}
/*--------------------------------------------------------
函数名:FirstFit_new()
功 能:首次适应算法分配内存
--------------------------------------------------------*/
void FirstFit_new(){
int i,j,size;
char temp[10];
printf(FirstFit_new:How many MEMORY requir?);
gets(temp);
size=atoi(temp); //将字符串转化为整数
for(i=0; i MEMSIZE-1 MemList[i].info != e;i++) //到了空间尾且没有空间分配
{
if(MemList[i].size = size MemList[i].info==f) //满足所需要的大小,且是空闲空间
{
if(MemList[i].size - size = MINSIZE) //如果小于规定的最小差则将整个空间分配出去
MemList[i].info=u; //标志为使用
else
{
for(j = MEMSIZE-2; j i; j--) //将i后的信息表元素后移
{
MemList[j+1]=MemList[j];
}
//将i分成两部分,使用低地址部分
MemList[i+1].start= MemList[i].start+size;
MemList[i+1].size = MemList[i].size-size;
MemList[i+1].in
文档评论(0)