1、#define ERROR 0 /出错#define MAX_length 640 /最大内存空间为640KBtypedef int Status;typedef struct freearea/定义一个空闲区说明表结构 int ID; long size; long address; int state;ElemType;typedef struct DuLNode /double linked list ElemType data; struct DuLNode *prior; /前趋指针 struct DuLNode *next; /后继指针DuLNode,*DuLinkList;DuL
2、inkList block_first; /头结点DuLinkList block_last; /尾结点Status alloc();/内存分配Status free(int); /内存回收Status First_fit(int,int);/首次适应算法void show();/查看分配Status Initblock();/开创空间表Status Initblock()/开创带头结点的内存空间链表 block_first=(DuLinkList)malloc(sizeof(DuLNode); block_last=(DuLinkList)malloc(sizeof(DuLNode); bl
3、ock_first-prior=NULL;next=block_last; block_last-prior=block_first;next=NULL;data.address=0;data.size=MAX_length;data.ID=0;data.state=Free; return OK;/- 分 配 主 存 -Status alloc() int ID,request; coutID;请输入需要分配的主存大小(单位:KB):request; if(request0 |request=0) coutdata.ID=ID;data.size=request;data.state=Bus
4、y; DuLNode *p=block_first-next; while(p) if(p-data.state=Free & p-data.size=request) /有大小恰好合适的空闲块 p- return OK; break; data.sizerequest) /有空闲块能满足需求且有剩余 temp-prior=p-prior;next=p;data.address=p-data.address;prior-next=temp;prior=temp;data.address=temp-data.address+temp-data.size;data.size-=request; p
5、=p- return ERROR;/- 主 存 回 收 -Status free(int ID) DuLNode *p=block_first;data.ID=ID)data.ID=Free; if(p-data.state=Free)/与前面的空闲块相连 p-data.size+=p-next=p-next- data.state=Free)/与后面的空闲块相连if(p-next=NULL)p-elseprior=p;分区:ID回收成功/ /- 显示主存分配情况 -void show()+n+ 主 存 分 配 情 况 +n分 区 号:data.ID=Free) coutdata.ID起始地址
6、: 分区大小:data.size KB 状 态:data.state=Free)空 闲已分配/- 主 函 数-void main() Initblock(); int choice; int i; for(i=0;i+) coutchoice; if(choice=1)/ 分配内存 alloc(); else if(choice=2)/ 内存回收 int ID;请输入您要释放的分区号: free(ID); else if(choice=3)/显示主存 show(); else if(choice=0)/退出 else /输入操作有误输入有误,请重试! continue;四、案例测试初始空闲区作业1进入空闲区后的状态作业2进入空闲区后的状态作业3进入空闲区后的状态作业4进入空闲区后的状态100k20K1K50k14k60k0k18k180k45k
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1