版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验报告内存动态分区分配和回收的模拟实现下载可编辑班级:2013 级软件工程 1 班学号:X X X姓名:萧氏一郎数据结构说明 :Struct SubAreaListA分配空间链表Struct SubAreaListF空闲分区链表Viod Swap(Task&task,Task&task1)交换作业顺序函数Viod InitDate()初始化链表Viod MAllocate(Task task,int M)为申请分配内存Viod MFree(Task task,intN )释放内存流程图:a.内存分配从头开始查表NO检查完成?YesYesNO继续检索M.sizeu/size?下一项.专
2、业 .整理 .下载可编辑YesM.size-u.size,aa 或 m.size=0不是第一个木目标且与前一个可用去NO与后一可用分NO区相邻且不为空表目YesNO所释放的可用区的后释放的可用区与size=0后一可用区合并Yes将该表目以上所有表目上移一格,并插入新释放的可用区表目Yes把所释放的可用区与前一分区合并与后一可用分区合Yes与后一可用区合并NO将该表以上的所有表格下移一格返回.专业 .整理 .下载可编辑.专业 .整理 .下载可编辑源代码:#include #include #include #define SIZE_MIN 2#define MEMSIZE_MAX 1024#de
3、fine FALSE 0#define TRUE !FALSE/* 采用最佳分配法 */typedef int BOOL;typedef struct _MEM_LINKchar cName; /*作业名 */int iStartAddr; /*分区起始地址 */int iMemSize; /*分区大小 */BOOL iState; /* 分区状态 ,1 表示已分配 , 0 表示未分配 */struct _MEM_LINK* next; MEM_LINK, *PMEM_LINK; PMEM_LINK g_pslnkHead; /* 初始化内存使用情况 */ void init()g_pslnk
4、Head=(PMEM_LINK)malloc(sizeof(MEM_LINK); memset(g_pslnkHead, 0, sizeof(MEM_LINK); g_pslnkHead-iMemSize = MEMSIZE_MAX;int menu()int i;printf(nn1. 分配内存 n); printf(2. 回收内存 n); printf(3. 显示内存使用情况 n); printf(4. 退出 n);printf(n 请输入选择 :); scanf(%d,&i);.专业 .整理 .下载可编辑getchar();return(i);/* 分配内存函数 ,c 为作业名 ,usi
5、ze 是要分配的大小 */ int my_malloc(char c,int usize) PMEM_LINK psNewMem = NULL,plnkTmp = NULL;BOOLbRepeatName = FALSE;int iTmp = g_pslnkHead-iMemSize - usize*SIZE_MIN;if (iTmp cName = c)bRepeatName = TRUE;break;plnkTmp = plnkTmp-next;if (bRepeatName) /*如果作业名重复*/return FALSE;/*创建新的节点*/psNewMem = (PMEM_LINK)
6、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_pslnkHead;.专业 .整理 .下载可编辑/*查找链表最尾节点*/while (plnkTmp-next != NULL) plnkTmp
7、 = plnkTmp-next; /* 把新创建的节点加入到链表中 */plnkTmp-next = psNewMem;/*在整体内存中去掉以分配的部分*/g_pslnkHead-iMemSize -= usize*SIZE_MIN; return TRUE;/* 回收内存函数 ,c 是撤销的进程的作业名;*/int my_free(char c)PMEM_LINK plnkBK = g_pslnkHead,/*保留上次搜索的节点*/plnkTmp = g_pslnkHead-next;BOOLbFind = FALSE;intiFreeSize = 0;/*搜索链表*/while (plnk
8、Tmp != NULL)if (plnkTmp-cName = c)/*如果找到节点 ,退出循环*/bFind = TRUE;break;plnkBK = plnkTmp;plnkTmp = plnkTmp-next;if (bFind)/*把找到的节点从链表中摘除并释放*/g_pslnkHead-iMemSize += plnkTmp-iMemSize; plnkBK-next = plnkTmp-next;/*保留要释放内存的大小*/iFreeSize = plnkTmp-iMemSize;/*释放 */free(plnkTmp);.专业 .整理 .下载可编辑/*把未释放内存的开始地址提前
9、, 防止内存碎片*/plnkTmp = plnkBK-next;while (plnkTmp != NULL)plnkTmp-iStartAddr -= iFreeSize;plnkTmp = plnkTmp-next;return bFind;void disp()PMEM_LINK pTmp;int i = 0;pTmp = g_pslnkHead;printf(n分区号 作业名起始地址分区大小状态 );while(pTmp)printf(n%4d%c%4d%4d%4d,i, pTmp-cName, pTmp-iStartAddr, pTmp-iMemSize, pTmp-iState);pTmp = pTmp-next;i+;void main()int i;char c;init();i = menu();while (i!=4)if (i=1).专业 .整理 .下载可编辑printf(n作业名 (一个字符 ):);scanf(%c,&c);printf( 作业占内存大小 :);scanf(%d, &i);if(my_malloc(c,i) printf(n 分配成功 ! ); else printf(n 分配失败
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 气候变化健康风险的健康传播优化策略
- AI 绘画模型微调技师考试试卷及答案
- 晚期胃肠间质瘤(GIST)标准化治疗规范(临床完整版)
- 2026届北京海淀北方交大附中高三下学期期中测试化学试题含解析
- 湖南省郴州市一中2026届高三5月会考化学试题含解析
- 湖北省黄冈高级中学2026届高三化学试题模拟测试卷(四)含解析
- 4.3《依法履行义务》教学设计 2025-2026学年统编版道德与法治八年级下册
- 热活检钳在肥胖手术优化
- 2025~2026学年江苏省泰州市海陵区九年级第一学期期末英语试卷
- 2026街道社工考试题型及答案
- 盆底康复中心运营管理
- 新疆乌鲁木齐天山区2026届中考历史全真模拟试卷含解析
- 2026年乡村医生培训考试试卷及答案(共十九套)
- 2026年湖北省武汉市辅警协警笔试真题及答案
- GB/T 47417-2026蜂蜜中水不溶物的测定
- 泰山教育联盟2026届高三年级4月考试模拟 政治试题(含答案)
- 2026年成都市新都区街道办人员招聘笔试模拟试题及答案解析
- 2026届广东省惠州市高三下学期模拟考试历史试题(含答案)
- 110kV变电站电气设备吊装专项施工方案
- 2025年江苏省南通市海门市小升初数学试卷
- 2026年云南省初中学业水平考试数学仿真卷(一)(含答案)
评论
0/150
提交评论