当前位置:首页 > 计算机操作系统内存管理系统可变分区存储管理方式的内存分配回收
精心整理
free_table[j].flag=0; //将第j栏的标记置为‘0’ }
else //不存在下邻接,和上邻接合并 free_table[k].length+=recycle_length; }
else if(j!=-1)
{ //只有下邻接,和下邻接合并 free_table[j].length+=recycle_length; free_table[j].address=recycle_address; } else
{ //上下邻接都没有 x=0; while(free_table[x].flag!=0) x=x+1; //在空闲区表中查找一个状态为‘0’的栏目 if(x<=m-1) { //找到后,在空闲分区中登记回收的内存 free_table[x].address=recycle_address; free_table[x].length=recycle_length; free_table[x].flag=1; } else { //空闲表已满,执行回收失败 used_table[y].flag=process_name; cout<<\空闲区已满,回收失败!\\n\ return 0; } }
return process_name; }
void show() //程序执行时输出模拟的内存分配回收表 {
cout<<\;
cout<<\ 空 闲 区 +++++++\\n\
cout<<\ for(int i=0;i<=count2;i++)
cout<<\地址:\ \作业长度:
\ \状 态:\ cout<<\;
cout<<\ 已 分 配 区 ++++++\\n\
cout<<\ for(int j=0;j 精心整理 cout<<\地址:\ \作业长度: \ \作业名:\} void main() //主函数调用各功能函数对所有工作进行测试 { int choice; //用来选择将要进行的操作 int job_name; float need_memory; bool exitFlag=false; cout<<\ 动态分区分配方式的模拟 \\n\ cout<<\ cout<<\请选择操作类型:\\n\ initialize(); //开创空闲区和已分配区两个表 while(!exitFlag) { cout<<\ cout<<\ 1: 分配内存 2: 回收内存 **\\n\ cout<<\ 3: 查看分配 0: 退 出 **\\n\ cout<<\ cout<<\请输入您的操作 :\ cin>>choice; switch(choice) { case 0: exitFlag=true; //退出操作 break; case 1: cout<<\请输入作业名和所需内存:\ cin>>job_name>>need_memory; distribute(job_name, need_memory); // 分配内存 break; case 2: int ID; cout<<\请输入您要释放的分区号:\ cin>>ID; recycle(ID); //回收内存 break; case 3: show(); break; } } } 十一、心得体会: 精心整理 每一次的实践,都会有很大的收获。决定做这个题目的时候,就针对此题要解决的几个问题反复思考,重新翻开教科书把相关内容特别是算法原理认真细致的看了一遍,设想会遇到的问题。在内存动态分配程序设计中,最优适应算法比首次要难一些,要加上对分配后该分区是否能最好地利用的判断。再一个问题是回收时候的合并,对地址的修改不是很有把握。着手写程序后,半天才理清回收的内存和上下邻合并的条件与关系,写此处的代码时,逻辑上比较混乱,反复错误反复修改了很多次才调试正确,这也是花了最多时间才得以正确实现的部分。之前大多用的c语言,对结构体,对象等知识淡忘了很多,这一次的实践让我找回了很多学过的知识点,也弥补了很多的不足之处。逻辑思维也得到了锻炼,写代码也不再像初学的时候那么繁琐,自己都能感觉到那一点点的进步,顿时也觉得充实起来。还有一个难点就是为作业找到最佳空闲区,此处是参照了一些资料后,理清了条件,然后用一个while()两个if()语句循环嵌套就实现了此功能。实践中也发现自身很多的不足,比如上理论课时认为已经理解了的算法原理在用代码实践时,发现还是有模糊和思考不周的地方。 实践中最困难的是以前没有做过界面,所以虽然程序在大家的努力下还算顺利地完成了,功能测试也通过了,可是界面的制作却成了比较大的难题。好在之前在面向对象课程实验和程序设计课程设计中都用到过MFC,于是确定了用C++来制作界面。但是因为以前界面程序编写较少,所以界面的编写遇到了许多困难,特别是实现内存分配表和空闲分区表的输出遇到了很大的挫折,最后在查阅资料、认真思考的基础上实现内存分配表和空闲分区表的输出,并最终作出了内存管理子系统。在添加控件和消息映射的时候,问题不是很大,但是在对相应控件添加代码和给类添加成员函数的时候,要将源代码对应的部分添加进去,且要注意修包含的头文件。这些地方一直频繁出错,或在功能得不到实现,大家一起边找资料边学习新的知识,通过很多次的尝试,终于做出了界面,虽然不太好看,而且功能也很简单,但这也是也经过大家很大努力才完成的。 学习着,收获着,并快乐着,这真是小组成员们共同的感触。对于自身不足的地方,大家也有了比较清晰的认识,对未来的发展,也有了个参照,将遇到的困难一个个跨过,并最终完成此次课程设计,真的感觉很有收获很有成就感。同时也培养了团队合作精神,几次的讨论,大大提升了我们合作的默契度,体会到合作的重要性。动手能力也得到了提高,当然,我们的设计还有很多的不足之处,有些问题没能很好解决,但通过不断学习和实践,我们一定会做的更好。
共分享92篇相关文档