内存动态分配和回收的模拟实验

内存动态分配和回收的模拟实验

ID:47473876

大小:159.82 KB

页数:8页

时间:2020-01-11

内存动态分配和回收的模拟实验_第1页
内存动态分配和回收的模拟实验_第2页
内存动态分配和回收的模拟实验_第3页
内存动态分配和回收的模拟实验_第4页
内存动态分配和回收的模拟实验_第5页
资源描述:

《内存动态分配和回收的模拟实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、操作系统实验报告内存动态分区分配和回收的模拟实现班级:2013级软件工程1班学号:XXX姓名:萧氏一郎数据结构说明:StructSubAreaListA分配空间链表StructSubAreaListF空闲分区链表ViodSwap(Task&task,Task&task1)交换作业顺序函数ViodInitDate()初始化链表ViodMAllocate(Tasktask,intM)为申请分配内存ViodMFree(Tasktask,intN)释放内存流程图:a.内存分配Yes从头开始查表表NO检查完成?YesNO继续检索下一项M.size>u/size?NOYes将该分区移出返回将该分区分

2、配给请求者,修改有关数据从该分区划出u.size大小的分区M.size-u.size,<=size?b.内存回收回收区NONONONOYesYesYesYes返回将该表以上的所有表格下移一格与后一可用区合并与后一可用分区合并把所释放的可用区与前一分区合并将该表目以上所有表目上移一格,并插入新释放的可用区表目所释放的可用区的size=0后释放的可用区与后一可用区合并与后一可用分区相邻且不为空表目不是第一个木目标且与前一个可用去相邻?顺序次检索可用资源表直到找到某表目的m.addr>aa或m.size=0源代码:#include#include#incl

3、ude#defineSIZE_MIN2#defineMEMSIZE_MAX1024#defineFALSE0#defineTRUE!FALSE/*采用最佳分配法*/typedefintBOOL;typedefstruct_MEM_LINK{charcName;/*作业名*/intiStartAddr;/*分区起始地址*/intiMemSize;/*分区大小*/BOOLiState;/*分区状态,1表示已分配,0表示未分配*/struct_MEM_LINK*next;}MEM_LINK,*PMEM_LINK;PMEM_LINKg_pslnkHead;/*初始化内存使用情

4、况*/voidinit(){g_pslnkHead=(PMEM_LINK)malloc(sizeof(MEM_LINK));memset(g_pslnkHead,0,sizeof(MEM_LINK));g_pslnkHead->iMemSize=MEMSIZE_MAX;}intmenu(){inti;printf("1.分配内存");printf("2.回收内存");printf("3.显示内存使用情况");printf("4.退出");printf("请输入选择:");scanf("%d",&i);getchar();return(i);}/*分配内存函数,

5、c为作业名,usize是要分配的大小*/intmy_malloc(charc,intusize){PMEM_LINKpsNewMem=NULL,plnkTmp=NULL;BOOLbRepeatName=FALSE;intiTmp=g_pslnkHead->iMemSize-usize*SIZE_MIN;if(iTmp<=0)/*如果没有足够的空间分配*/returnFALSE;plnkTmp=g_pslnkHead;while(plnkTmp!=NULL){if(plnkTmp->cName==c){bRepeatName=TRUE;break;}plnkTmp=plnkTmp->nex

6、t;}if(bRepeatName)/*如果作业名重复*/{returnFALSE;}/*创建新的节点*/psNewMem=(PMEM_LINK)malloc(sizeof(MEM_LINK));/*结构体设零*/memset(psNewMem,0,sizeof(MEM_LINK));/*设置节点内容*/psNewMem->cName=c;psNewMem->iMemSize=usize*SIZE_MIN;psNewMem->iStartAddr=MEMSIZE_MAX-g_pslnkHead->iMemSize;psNewMem->iState=TRUE;plnkTmp=g_pslnk

7、Head;/*查找链表最尾节点*/while(plnkTmp->next!=NULL)plnkTmp=plnkTmp->next;/*把新创建的节点加入到链表中*/plnkTmp->next=psNewMem;/*在整体内存中去掉以分配的部分*/g_pslnkHead->iMemSize-=usize*SIZE_MIN;returnTRUE;}/*回收内存函数,c是撤销的进程的作业名;*/intmy_free(charc){PMEM

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。