可变分区的分配与回收(最先适应算法)c程序代码

-----------------------------------精品考试资料---------------------学资学习网-----------------------------------#include<iostream>//#include<malloc.h>//#include<stdio.h>//#include<stdlib.h>#include<cmath>usingnamespacestd;structmap{unsignedm_size;//空闲区大小char*m_addr;//空闲区首地址structmap*next,*prior;//指向前一个和后一个空闲区结点的指针};//定义链表以管理空闲区structprocess{unsignedp_size;//进程大小char*p_addr;//进程首地址};processarray[100];//定义数组以管理进程map*head;//定义头指针map*cursor;//定义指向当前空闲区的游标指针unsignedsiz,room;//定义分配的整个内存空间的大小intchoice;---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---voidcreate();//初始化管理空闲区的链表1/10voidbegin();//主体函数char*lmalloc(unsignedsize);//分配进程函数voidlfree(unsignedsize,char*addr);//释放进程函数voidprint_proess();//打印当前进程情况voidmain()//主函数{create();begin();}voidcreate()//初始化循环链表{head=newmap;head->prior=head;head->next=head;//创建头指针cursor=head;潣瑵?请输入要分配的系统的总空间大小:;cin>>siz;room=siz;head->m_addr=(char*)malloc(room*sizeof(char));//初始化首地址head->m_size=room;//初始化整个空闲区大小---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---潣瑵?分配的首地址:<<head->m_addr<<endl;cout<<endl;潣瑵?分配的总空间大小:<<head->m_size<<endl;2/10for(intj=1;j<=100;j++){array[j].p_size=0;}//初始化进程数组,使其大小全为0}voidbegin(){unsignedm_size;inti=1;unsignednum;while(choice!=3)捻畯?攼摮?尼请选择操作:<<endl;cout<<:分配进程空间<<endl;cout<<:释放进程空间<<endl;cout<<:结束操作<<endl;//选择操作cin>>choice;if(choice==1)//若选择分配进程捻畯?攼摮?尼请输入要分配空间的大小:;cin>>m_size;---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---if(array[i].p_addr=lmalloc(m_size)){//调用lmalloc,分配内存,若成功分配array[i].p_size=m_size;//给进程数组赋值潣瑵?湥汤?此次分配进程为:进程<<i<<'\t'<<endl;潣瑵?首地址:<<array[i].p_addr<<endl;//输出进程首地址潣瑵?湥汤?进程大小:<<array[i].p_size<<endl;3/10cout<<*******************************;i++;print_proess();//每次分配进程后,打印(输出)系统当前进程的总情况}}else{if(choice==3)continue;//若选择退出操作,回到while判断else{if(choice==2){//若选择释放进程if(head->m_size==siz){//判断系统是否有进程存在潣瑵?无进程可释放,当前系统为空!<<endl;continue;//回到while判断}---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---潣瑵?湥汤?请输入要释放的进程号:;cout<<(当前存在的进程有:;for(intj=1;j=>100;j++){if(array[j].p_size!=0)cout<<j<<,;}//输出当前可释放的进程情况cout<<);cin>>num;//输入释放进程号4/10if(array[num].p_size==0){//判断此进程是否驻于内存潣瑵?无此进程!<<endl;continue;//回到while}else{lfree(array[num].p_size,array[num].p_addr);//执行lfree函数array[num].p_size=0;//令进程数组中该进程的大小置0潣瑵?释放中......<<endl;潣瑵?进程?渼浵?已释放!<<endl;cout<<*******************************;print_proess();//每次释放进程后,亦打印(输出)系统当前进程的总情况}//else---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---}//ifelse潣瑵?输入字符无效!<<endl;}//else}//else}//while}voidprint_proess()//打印系统当前的进程的总情况捻畯?攼摮?尼系统当前进程总情况:<<endl<<endl;5/10if(head->m_size==siz){潣瑵?无进程,系统为空!<<endl;}for(intj=1;j<=100;j++){if(array[j].p_size=!0){潣瑵?进程:<<j<<endl;潣瑵?首地址:<<array[j].p_addr<<endl;潣瑵?湥汤?进程大小:<<array[j].p_size<<endl<<endl;}//访...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?