1 / 9
文档名称:

最佳适应算法的C 编程.doc

格式:doc   大小:35KB   页数:9页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

最佳适应算法的C 编程.doc

上传人:mh900965 2018/1/21 文件大小:35 KB

下载得到文件列表

最佳适应算法的C 编程.doc

文档介绍

文档介绍:最佳适应算法的C++编程
:
本程序在vc++,考虑到很多种情况.
(1)、我发现书上所说的当回收块与空闲块相连的那些情况,没有必要每种情况都写一个条件语句,然后用不同的语句来连接那些相连的内存块(这种做法见下面源程序中黑体字部分)。ept时不考虑是否会和已存在的空闲块相连,直接将它回收,然后按照首地址大小排序,再利用link函数将只要是相连的内存块都连起来。
(2)、当使用assign函数分配空闲块时,如果空闲块正好被分完(即空闲块的SIZE=0)时打印输出的数据会是一组首地址和尾地址相等,而size=0的数据,这显然不符合逻辑,因为首地址等于尾地址时size=1,而不是零!所以我想到了两种办法让刚好被分配完的空闲块不输出,第一种办法(见以下注释部分的print()函数部分的函数)只是屏蔽掉了SIZE=0的数据,而它们还是存在,即没有被真正的消灭掉,只是仅仅没被打印出来,这种做法将产生一种致命的后果,当SIZE=0的数据项非常多时将占用很多系统资源,运行程序时可能会死机!第二种做法(即源程序中所使用的print函数)才真正的将SIZE=0的数据项消灭掉。
(3)、ept函数回收内存时,只要输入的想回收的内存块中有一个区域(哪怕是SIZE=1的一小块)已经存在于空闲内存块中时就会输出提示错误的信息,我认为这样不是很合理,accept函数应该能避开输入的想回收的内存块中的已经是空闲的区域而只对非空闲区域作回收工作,这个功能在我的程序没有实现。
二、源程序:
#include
#include
int k=4;
struct list             // 初始化数据的结构体   
{
 int num;               
 int adr;              
 int end;             
    int size;
}s[]={{1,1000,2999,2000},{2,500,799,300},{3,3500,3699,200},{4,4000,4499,500}}; // 初始化空闲分区
/*void print(struct list *p,int n)      // print函数作用输出结果
{
 int flag1=1;
 int flag2=1;
 int i,j=0;
    cout<<"-------------------------------------\n";
 for(i=0;i
 {
  if(p->size==0)   // 控制不输出size=0的空闲块
  {
   flag2=0;
   j++;
   continue;
  }
  else
   flag2=1;
  if(p->size!=0&&flag2!=0)
  {
   flag1=0;
            cout<<"序号:"<<SETW(2)<num-j/*输出的序号仍然是从1开始*//*<<"   起始位置:"<<SETW(5)<adr<<"   终止位置:"<<SETW(5)<end<<"   空闲块大小:"<<SETW(5)<size<<ENDL;
  }
 }
 i