欢迎来到天天文库
浏览记录
ID:49663507
大小:138.50 KB
页数:10页
时间:2020-03-03
《内存动态分配和回收的模拟实验.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
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/si
2、ze?NOYes将该分区移出返回将该分区分配给请求者,修改有关数据从该分区划出u.size大小的分区M.size-u.size,<=size?资料..b.内存回收回收区NONONONOYesYesYesYes返回将该表以上的所有表格下移一格与后一可用区合并与后一可用分区合并把所释放的可用区与前一分区合并将该表目以上所有表目上移一格,并插入新释放的可用区表目所释放的可用区的size=0后释放的可用区与后一可用区合并与后一可用分区相邻且不为空表目不是第一个木目标且与前一个可用去相邻?顺序次检索可用资源表直到找到某表目的m.addr>aa或m.size=0资料..资料.
3、.源代码:#include#include#include#defineSIZE_MIN2#defineMEMSIZE_MAX1024#defineFALSE0#defineTRUE!FALSE/*采用最佳分配法*/typedefintBOOL;typedefstruct_MEM_LINK{charcName;/*作业名*/intiStartAddr;/*分区起始地址*/intiMemSize;/*分区大小*/BOOLiState;/*分区状态,1表示已分配,0表示未分配*/struct_MEM_LINK*
4、next;}MEM_LINK,*PMEM_LINK;PMEM_LINKg_pslnkHead;/*初始化内存使用情况*/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("
5、4.退出");printf("请输入选择:");scanf("%d",&i);getchar();return(i);}/*分配内存函数,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;wh
6、ile(plnkTmp!=NULL){if(plnkTmp->cName==c){bRepeatName=TRUE;break;}plnkTmp=plnkTmp->next;}if(bRepeatName)/*如果作业名重复*/{returnFALSE;}/*创建新的节点*/psNewMem=(PMEM_LINK)malloc(sizeof(MEM_LINK));/*结构体设零*/memset(psNewMem,0,sizeof(MEM_LINK));/*设置节点内容*/psNewMem->cName=c;资料..psNewMem->iMemSize=usize*
7、SIZE_MIN;psNewMem->iStartAddr=MEMSIZE_MAX-g_pslnkHead->iMemSize;psNewMem->iState=TRUE;plnkTmp=g_pslnkHead;/*查找链表最尾节点*/while(plnkTmp->next!=NULL)plnkTmp=plnkTmp->next;/*把新创建的节点加入到链表中*/plnkTmp->next=psNewMem;/*在整体内存中去掉以分配的部分*/g_pslnkHead->iMemSize-=usize*SIZE_MIN;returnTRUE;}/*回收内存函数,c是
8、撤销的进程
此文档下载收益归作者所有