可变分区存储管理

可变分区存储管理

ID:18324580

大小:79.73 KB

页数:9页

时间:2018-09-16

可变分区存储管理_第1页
可变分区存储管理_第2页
可变分区存储管理_第3页
可变分区存储管理_第4页
可变分区存储管理_第5页
资源描述:

《可变分区存储管理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验一可变分区存储管理(一)实验题目编写一个C程序,用char*malloc(unsignedsize)函数向系统申请一次内存空间(如size=1000,单位为字节),模拟UNIX可变分区内存管理,实现对该内存区的分配和释放管理。(二)实验目的1.加深对可变分区的存储管理的理解;2.提高用C语言编制大型系统程序的能力,特别是掌握C语言编程的难点:指针和指针作为函数参数;3.掌握用指针实现链表和在链表上的基本操作。(三)重要数据结构和算法1。内存申请用首次适应法addr=(char*)fmalloc

2、(unsignedsize)和ffree(unsignedsize,char*addr)申请一块内存空间2。空闲存储区表可采用结构数组的形式(基本要求)或双向链接表的形式(提高一步),建议采用的数据结构为:结构数组的形式:structmap{unsignedm_size;char*m_addr;};structmapcoremap[N];然后构建大块的结构STRUCTCOLUME,由STRUCTMAP组成链接的小块依序向内填充。按照MALLOC和FREE的具体要求,对于链表的组成部分MAP进行分类

3、操作,并且由SIZE和ADDR来记录块的大小和位置。3.MALLOC和FREE的算法采用首次适应法为作业分配大小为size的内存空间时,总是从表的始端的低地址部分开始查找。当第一次找到大于或等于申请大小的空闲区时,就按所需大小分配给作业。如果分配后原空闲区还有剩余空间,就修改原存储区表项的m_size和m_addr,使它记录余下的“零头”。如果作业所需空间正好等于该空闲区大小,那么该空闲区表项的m_size就成为0。接下来要删除表中这个“空洞”,即将随后的各非零表项依次上移一个位置。前空闲区释放区

4、后空闲区(a)前空闲区释放区后空闲区(b)前空闲区释放区后空闲区(c)前空闲区释放区后空闲区(d)图2-9释放区与前后空闲区相邻的情况由图示所述在释放时的4种不同情况,在FREE时先用IF语句对不同的情况做分类讨论,然后再各自进入所对应的支路。此外,由实践得知,在释放区紧贴内存申请区的边界时,所用循环语句可能有不适用的情况,需要做额外的处理。(四)源程序、注释、输入和结果#include#include#definesysmaxsize1000;structm

5、ap{unsignedm_size;char*m_addr;structmap*next;};char*addr=(char*)malloc(sysmaxsize);//程序内存申请structcolume{public:map*ori;colume(){ori=newmap;//大小为1000的内存空间ori->m_size=sysmaxsize;ori->m_addr=addr;ori->next=ori;}~colume(){deleteori;}voidadd(map*q,map*p)//

6、增加节点{if(q!=NULL){p->next=q->next;q->next=p;}else{ori=p;p->next=ori;}}voiddel(map*q)//删除节点{map*p=q->next;if(p==q)ori=NULL;elseq->next=p->next;deletep;}};colume*cure=newcolume;voidmain(){charcmdchar,*a,c;unsigneds;printf("%d%d",addr,sysmaxsize);//prin

7、tthelogicaladdresswhile(1){do{cmdchar=getchar();//inputthecommand}while(cmdchar==''

8、

9、cmdchar=='t'

10、

11、cmdchar=='');if(cmdchar=='m')//malloc{scanf("%u",&s);a=Imalloc(s);if(a==0)printf("mallocfailed");elseprintf("%d%d",s,a-int(addr));printfreespace(

12、);}elseif(cmdchar=='f')//free{scanf("%u%u",&s,&a);c=Ifree(s,a+int(addr));if(c!=0)printf("freesuccessfully");elseprintf("freeerror");printfreespace();}elsebreak;}}char*Imalloc(unsignedsize){registerchar*a;registerstructmap*blankpot;blankpot

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

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

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