动态内存分配(C语言)_第1页
动态内存分配(C语言)_第2页
动态内存分配(C语言)_第3页
动态内存分配(C语言)_第4页
动态内存分配(C语言)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验报告实验报告实验课程名称:动态内存分配算法专 业: 计算机科学与技术 班 级: 姓 名: 学 号: 实验学时: 指导教师: 成 绩: 年12月1日实验报告专业计算机科学与技术班级姓名学号实验课程操作系统指导教师实验日期同实验者实验项目动态内存分配算法实验设备及器材PC机一台,VC+6.0一、实验内容与要求动态分区分配又称为可变分区分配,它是根据进程的实际需要,动态地为之分配内存空间。在实验中运用了三种基于顺序搜索的动态分区分配算法,分别是1.首次适应算法2.循环首次适应算法3.最佳适应法3.最坏适应法分配主存空间。二、需求分析本次实验通过C语言进行编程并调试、运行,显示出动态分区的分配方式

2、,直观的展示了首次适应算法循环首次适应算法、最佳适应算法和最坏适应算法对内存的释放和回收方式之间的区别。首次适应算法要求空闲分区链以地址递增的次序链接,在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止,然后在按照作业的大小,从该分区中划出一块内存空间,分配给请求者,余下的空余分区仍留在空链中。优点:优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空闲区,为以后到达的大作业分配大的内存空间创造了条件。缺点:低址部分不断被划分,会留下许多难以利用的、很小的空闲分区即碎片。而每次查找又都是从低址部分开始的,这无疑又会增加查找可用空闲分区时的开销。循环首次适应算法在为

3、进程分配内存空间时,不是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区。优点:该算法能使内存中的空闲分区分布得更均匀,从而减少了查找空闲分区时的开销。最佳适应算法该算法总是把能满足要求、又是最小的空闲分区分配给作业,避免大材小用,该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。缺点:每次分配后所切割下来的剩余部分总是最小的,这样,在存储器中会留下许多难以利用的碎片。最坏适应算法最坏适应算法选择空闲分区的策略正好与最佳适应算法相反:它在扫描整个空闲分区或链表时,总会挑选一个最大的空闲区,从中切割一部分存储空间给作业使用

4、。该算法要求,将所有的空闲分区,按其容量以大到小的顺序形成一空闲分区链。查找时,只要看第一个分区能否满足作业要求即可。优点:可使剩下的空闲区不至于太小,产生碎片的可能性最小,对中小作业有利,同时,最坏适应算法查找效率很高。缺点:导致存储器中缺乏大的空闲分区三、数据结构为了实现动态分区分配算法,系统中配置了相应的数据结构,用以描述空闲分区和已分配分区的情况,常用的数据结构有空闲分区表和空闲分区链流程图当一个新作业要求装入主存时,必须查空闲分区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这时应把它分成两部分,一部分为占用区,另一部分为空闲区。当一个作业撤离时,归还的区域如果与其他

5、空闲区相邻,则合并成一个较大的空闲区,登录在空闲区表中。四、功能实现五、心得体会通过本次实验,对动态内存分配的相关知识有了更深的认识,中途也遇到了许多困难,但幸运的是最终的顺利的解决并完成了此次试验,也更加熟练地掌握了关于内存分配的使用。六、源代码#include<iostream>using namespace std;int FreePartition100;/空闲分区块数组int FirstPartition100;/首次适应算法数组int CycleFirstPartition100;/循环首次适应算法数组int BestPartition100;/最佳适应算法数组int

6、WorstPartition100;/最坏适应算法数组int ProcessNeed100;/每个作业的大小int PartitionNum,ProcessNum;/分区块数,作业数/首次适应算法void First()int i,j;char str;for(i=0;i<PartitionNum;i+)FirstPartitioni=FreePartitioni;for(i=0;i<ProcessNum;i+)/找出第一块满足作业的分区for(j=0;j<PartitionNum;j+)if(ProcessNeedi>FirstPartitionj)continue;

7、elseFirstPartitionj-=ProcessNeedi;/找到后把分区大小减去作业的大小 str='A'+i;cout<<"作业"<<str<<"在第"<<j+1<<"块分区中"<<endl;break;cout<<endl;cout<<"分配之后剩余情况:"<<endl; for(i=0;i<PartitionNum;i+)cout<<FirstPartitio

8、ni<<" "cout<<endl<<endl;/循环首次适应算法void CycleFirst()int i,j=1;char str;for(i=0;i<PartitionNum;i+)CycleFirstPartitioni=FreePartitioni;for(i=0;i<ProcessNum;i+)/for(j=0;j<PartitionNum;j+)j=j-1;while(j<PartitionNum)if(ProcessNeedi>CycleFirstPartitionj)/continue;j

9、+;elseCycleFirstPartitionj-=ProcessNeedi;str='A'+i;cout<<"作业"<<str<<"在第"<<j+1<<"块分区中"<<endl;break;/j+;/cout<<j<<" "if(j=PartitionNum && i!=ProcessNum)i=-1;cout<<endl;cout<<"分配之后剩余

10、情况:"<<endl;for(i=0;i<PartitionNum;i+)cout<<CycleFirstPartitioni<<" "cout<<endl<<endl;/最佳适应算法void Best()int i,j,k;char str; for(i=0;i<PartitionNum;i+)BestPartitioni=FreePartitioni;for(i=0;i<ProcessNum;i+)k=0;for(j=0;j<PartitionNum;j+)/cout<&

11、lt;BestPartitionj<<" "<<ProcessNeedi<<endl;if(BestPartitionj>=ProcessNeedi)k=j;break; for(int n=0;n<PartitionNum;n+) if(BestPartitionn<BestPartitionk && BestPartitionn>=ProcessNeedi)/找最佳的 k=n; BestPartitionk-=ProcessNeedi;str='A'+i;cout<<

12、"作业"<<str<<"在第"<<j+1<<"块分区中"<<endl;cout<<endl;cout<<"分配之后剩余情况:"<<endl;for(i=0;i<PartitionNum;i+)cout<<BestPartitioni<<" "cout<<endl<<endl;/最坏适应算法void Worst()int i,j,k;char str

13、;for(i=0;i<PartitionNum;i+)WorstPartitioni=FreePartitioni;for(i=0;i<ProcessNum;i+)k=0;for(j=0;j<PartitionNum;j+)if(WorstPartitionj>WorstPartitionk)/找到最大的分区 k=j;WorstPartitionk-=ProcessNeedi;str='A'+i;cout<<"作业"<<str<<"在第"<<j+1<<&q

14、uot;块分区中"<<endl;cout<<endl;cout<<"分配之后剩余情况:"<<endl;for(i=0;i<PartitionNum;i+)cout<<WorstPartitioni<<" "cout<<endl<<endl;void main()int i;cout<<"输入分区块数:"<<endl;cin>>PartitionNum;cout<<"输入每个分区的大小:"<<endl;for(i=0;i<PartitionNum;i+)cin>>FreePartitioni;cout<<"输入作业数:"<<endl;cin>>ProcessNum;cout<<"输入每个作业的大小:"<<endl;for(i=0;i<ProcessNum;i+)cin>>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论