最佳适应算法源代码(共6页).doc

上传人:飞****2 文档编号:13561407 上传时间:2022-04-30 格式:DOC 页数:6 大小:26.50KB
返回 下载 相关 举报
最佳适应算法源代码(共6页).doc_第1页
第1页 / 共6页
最佳适应算法源代码(共6页).doc_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《最佳适应算法源代码(共6页).doc》由会员分享,可在线阅读,更多相关《最佳适应算法源代码(共6页).doc(6页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精选优质文档-倾情为你奉上#include #include /全局变量float minsize=5;int count1=0;int count2=0;#define m 10/假定系统允许的空闲区表最大为m#define n 10 /假定系统允许的最大作业数量为n/已分配表的定义structfloat address; /已分分区起始地址 float length; /已分分区长度,单位为字节 int flag; /已分配区表登记栏标志,0表示空栏目used_tablen; /已分配区表对象名/空闲区表的定义:structfloat address;/空闲区起始地址 float leng

2、th;/空闲区长度,单位为字节 int flag; /空闲区表登记栏标志,用0表示空栏目,用1表示未分配free_tablem; /空闲区表对象名/函数声明void initialize(void);int distribute(int, float);int recycle(int);void show();/初始化两个表void initialize(void)int a;for(a=0; a=n-1; a+)used_tablea.flag=0;/已分配表的表项全部置为空表项free_table0.address=1000;free_table0.length=1024;free_tab

3、le0.flag=1;/空闲区表的表项全部为未分配/最优分配算法实现的动态分区int distribute(int process_name, float need_length)int i, k=-1;/k用于定位在空闲表中选择的未分配栏float ads, len;int count=0;i=0; while(i=m-1) /循环找到最佳的空闲分区if(free_tablei.flag=1 & need_length =free_tablei.length)count+;if(count=1|free_tablei.length free_tablek.length)k=i;i=i+1;i

4、f(k!=-1)if(free_tablek.length-need_length)=minsize) /整个分配free_tablek.flag=0;ads=free_tablek.address;len=free_tablek.length;else/切割空闲区ads=free_tablek.address;len=need_length;free_tablek.address+=need_length;free_tablek.length-=need_length;i=0;/循环寻找内存分配表中标志为空栏目的项while(used_tablei.flag!=0) i=i+1;if(i=n

5、-1) /找到,在已分配区表中登记一个表项used_tablei.address=ads;used_tablei.length=len;used_tablei.flag=process_name;count1+;else /已分配区表长度不足if(free_tablek.flag = 0) /将已做的整个分配撤销free_tablek.flag=1;free_tablek.address=ads;free_tablek.length=len;else /将已做的切割分配撤销free_tablek.address=ads; free_tablek.length+=len;cout内存分配区已满,

6、分配失败!n; return 0;elsecout 无法为该作业找到合适分区!n;return 0;return process_name;int recycle(int process_name) int y=0;float recycle_address, recycle_length;int i, j, k; /j栏是下邻空闲区,k栏是上栏空闲区int x; /在内存分配表中找到要回收的作业while(y=n-1&used_tabley.flag!=process_name)y=y+1;if(y=n-1) /找到作业后,将该栏的标志置为0 recycle_address=used_tab

7、ley.address;recycle_length=used_tabley.length;used_tabley.flag=0;count2+;else /未能找到作业,回收失败cout=m|(k!=-1&j!=-1) /修改空闲分区表if(free_tablei.flag=1)if(free_tablei.address+free_tablei.length)=recycle_address)k=i;/判断是否有上邻接if(recycle_address+recycle_length)=free_tablei.address)j=i;/判断是否有下邻接i=i+1;/合并空闲区if(k!=-

8、1) /回收区有上邻接if(j!=-1)/回收区也有下邻接,和上下领接合并free_tablek.length+=free_tablej.length+recycle_length;free_tablej.flag=0;/将第j栏的标记置为0else /不存在下邻接,和上邻接合并free_tablek.length+=recycle_length;else if(j!=-1) /只有下邻接,和下邻接合并free_tablej.length+=recycle_length;free_tablej.address=recycle_address; else /上下邻接都没有x=0;while(fr

9、ee_tablex.flag!=0)x=x+1;/在空闲区表中查找一个状态为0的栏目if(x=m-1) /找到后,在空闲分区中登记回收的内存free_tablex.address=recycle_address;free_tablex.length=recycle_length;free_tablex.flag=1;else /空闲表已满,执行回收失败used_tabley.flag=process_name;cout空闲区已满,回收失败!n;return 0;return process_name;void show() /程序执行时输出模拟的内存分配回收表cout+n; cout+ 空 闲

10、 区 +n; cout+n;for(int i=0;i=count2;i+) cout地址:free_tablei.address 作业长度:free_tablei.length 状 态:free_tablei.flagendl;cout+n; cout+ 已 分 配 区 +n; cout+n; for(int j=0;jcount1;j+) cout地址:used_tablej.address 作业长度:used_tablej.length 作业名:used_tablej.flagendl;void main() /主函数调用各功能函数对所有工作进行测试int choice; /用来选择将要

11、进行的操作int job_name;float need_memory;bool exitFlag=false;cout 动态分区分配方式的模拟 n; cout*n; cout请选择操作类型:n; initialize(); /开创空闲区和已分配区两个表while(!exitFlag)cout*n; cout* 1: 分配内存 2: 回收内存 *n; cout* 3: 查看分配 0: 退 出 *n; cout*n; coutchoice;switch(choice) case 0: exitFlag=true; /退出操作 break; case 1: coutjob_nameneed_memory; distribute(job_name, need_memory); / 分配内存 break; case 2: int ID; coutID; recycle(ID); /回收内存 break; case 3: show(); break;专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com