next;Р }Р if(w->next==NULL) //进程名不存在,继续进行内存分配Р { space *p,*r; Р p=pbc;Р r=p;Р while(p->" /> next;Р }Р if(w->next==NULL) //进程名不存在,继续进行内存分配Р { space *p,*r; Р p=pbc;Р r=p;Р while(p->" />

全文预览

内存的申请和释放

上传者:非学无以广才 |  格式:doc  |  页数:20 |  大小:288KB

文档介绍
if(strcmp(w->next->name, q->name)==0) //判断进程名是否已经存在Р {Р cout<<"此进程名已经存在!"<<endl; //进程名已经存在,返回Р return;Р } Р w=w->next;Р }Р if(w->next==NULL) //进程名不存在,继续进行内存分配Р { space *p,*r; Р p=pbc;Р r=p;Р while(p->next!=NULL&&p->next->length<q->length) //在空间链中寻找第一个大于所输入的进程大小的空闲块Р {Р r=p;Р p=p->next;Р } Р if(p->next==NULL) //空闲链中无大于所输入进程空间大小的空闲块Р {Р cout<<"空间不足,分配失败!"<<endl;Р delete q; //空间不足,分配失败,释放空间Р return;Р }Р else //找到第一个满足要求的空闲块Р { Р q->startaddress=p->next->startaddress; //将该空闲块的起始地址赋给所输入的进程Р q->next=S->next; Р S->next=q; //将所输入的进程插入work链首。Р Р p->next->length-=q->length; Р if(p->next->length!=0) //该空闲块空间有剩余,改变该空闲块的起始地址Р p->next->startaddress+=q->length; Р else //该空闲块空间无剩余Р {Р if(p->next->next!=NULL) //该空闲块不处于空闲链链尾Р p->next=p->next->next; //删除该空闲块,修改空闲链Р else Р {Р r->next=NULL; //该空闲块处于空闲链链尾,修改空闲链

收藏

分享

举报
下载此文档