




免费预览已结束,剩余2页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+语言实现系统内存分配与回收#include#include#define Free 0 /空闲状态#define Busy 1 /已用状态#define OK 1 /完成#define ERROR 0 /出错#define MAX_length 640 /最大内存空间为640KBtypedef int Status;int flag;typedef struct freearea/定义一个空闲区说明表结构long size; /分区大小long address; /分区地址int state; /状态ElemType;/ 线性表的双向链表存储结构typedef struct DuLNodeElemType data;struct DuLNode *prior; /前趋指针struct DuLNode *next; /后继指针DuLNode, *DuLinkList;DuLinkList block_first; /头结点DuLinkList block_last; /尾结点Status alloc(int);/内存分配Status free(int); /内存回收Status First_fit(int);/首次适应算法Status Best_fit(int); /最佳适应算法Status Worst_fit(int); /最差适应算法void show();/查看分配Status Initblock();/开创空间表 Status Initblock()/开创带头结点的内存空间链表block_first = (DuLinkList)malloc(sizeof(DuLNode);block_last = (DuLinkList)malloc(sizeof(DuLNode);block_first-prior = NULL;block_first-next = block_last;block_last-prior = block_first;block_last-next = NULL;block_last-data.address = 0;block_last-data.size = MAX_length;block_last-data.state = Free;return OK;/分配主存Status alloc(int ch)int request = 0;cout request;if (request0 | request = 0)cout 分配大小不合适,请重试! endl;return ERROR;if (ch = 2) /选择最佳适应算法if (Best_fit(request) = OK) cout 分配成功! endl;else cout 内存不足,分配失败! endl;return OK;if (ch = 3) /选择最差适应算法if (Worst_fit(request) = OK) cout 分配成功! endl;else cout 内存不足,分配失败! endl;return OK;else /默认首次适应算法if (First_fit(request) = OK) cout 分配成功! endl;else cout 内存不足,分配失败! data.size = request;temp-data.state = Busy;DuLNode *p = block_first-next;while (p)if (p-data.state = Free & p-data.size = request)/有大小恰好合适的空闲块p-data.state = Busy;return OK;break;if (p-data.state = Free & p-data.sizerequest)/有空闲块能满足需求且有剩余temp-prior = p-prior;temp-next = p;temp-data.address = p-data.address;p-prior-next = temp;p-prior = temp;p-data.address = temp-data.address + temp-data.size;p-data.size -= request;return OK;break;p = p-next;return ERROR;/最佳适应算法Status Best_fit(int request)int ch; /记录最小剩余空间DuLinkList temp = (DuLinkList)malloc(sizeof(DuLNode);temp-data.size = request;temp-data.state = Busy;DuLNode *p = block_first-next;DuLNode *q = NULL; /记录最佳插入位置while (p) /初始化最小空间和最佳位置if (p-data.state = Free & (p-data.size = request)if (q = NULL)q = p;ch = p-data.size - request;else if (q-data.size p-data.size)q = p;ch = p-data.size - request;p = p-next;if (q = NULL) return ERROR;/没有找到空闲块else if (q-data.size = request)q-data.state = Busy;return OK;elsetemp-prior = q-prior;temp-next = q;temp-data.address = q-data.address;q-prior-next = temp;q-prior = temp;q-data.address += request;q-data.size = ch;return OK;return OK;/最差适应算法Status Worst_fit(int request)int ch; /记录最大剩余空间DuLinkList temp = (DuLinkList)malloc(sizeof(DuLNode);temp-data.size = request;temp-data.state = Busy;DuLNode *p = block_first-next;DuLNode *q = NULL; /记录最佳插入位置while (p) /初始化最大空间和最佳位置if (p-data.state = Free & (p-data.size = request)if (q = NULL)q = p;ch = p-data.size - request;else if (q-data.size data.size)q = p;ch = p-data.size - request;p = p-next;if (q = NULL) return ERROR;/没有找到空闲块else if (q-data.size = request)q-data.state = Busy;return OK;elsetemp-prior = q-prior;temp-next = q;temp-data.address = q-data.address;q-prior-next = temp;q-prior = temp;q-data.address += request;q-data.size = ch;return OK;return OK;/主存回收Status free(int flag)DuLNode *p = block_first;for (int i = 0; i next;elsereturn ERROR;p-data.state = Free;if (p-prior != block_first & p-prior-data.state = Free)/与前面的空闲块相连p-prior-data.size += p-data.size;p-prior-next = p-next;p-next-prior = p-prior;p = p-prior;if (p-next != block_last & p-next-data.state = Free)/与后面的空闲块相连p-data.size += p-next-data.size;p-next-next-prior = p;p-next = p-next-next;if (p-next = block_last & p-next-data.state = Free)/与最后的空闲块相连p-data.size += p-next-data.size;p-next = NULL;return OK;/显示主存分配情况void show()int flag = 0;cout n主存分配情况:n;cout next;cout 分区号t起始地址t分区大小t状态nn;while (p)cout flag+ t;cout data.address tt;cout data.size data.state = Free) cout 空闲nn;else cout next;cout +nn;/主函数void main()int ch;/算法选择标记cout 请输入所使用的内存分配算法:n;cout ch;while (ch3)cout ch;Initblock(); /开创空间表int choice; /操
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 爱拼爱冒险性格测试题及答案
- pdp性格测试题完整版及答案
- 房产证抵押贷款资金拨付合同模板
- 出租车新能源技术研发及推广合同
- 南京市区二手房买卖合同含税费减免协议
- 出借业务流程优化与咨询服务合同
- 房屋维修催告函维修责任承担合同
- 创始股东合作协议及公司股权变更机制
- 工业园区土地租赁合同范本(含配套设施)
- 公司法务外包市场-洞察及研究
- 剥脱性皮炎课件
- 工程项目科技成果管理培训
- 科技论文写作教程市公开课金奖市赛课一等奖课件
- 中国古典乐器-古筝琵琶英文介绍(带翻译)课件
- 戴明环(PDCA循环)管理培训教材课件
- 塑胶场地施工方案
- 中小学高级职称英语全英答辩题
- 职业健康检查管理办法-解读课件
- 小学地方课程教案(全面完整版)
- 《非常规油气地质实验技术与应用》教学大纲
- 产生你的企业想法课件
评论
0/150
提交评论