模拟内存管理设计与实现Word文件下载.docx
《模拟内存管理设计与实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《模拟内存管理设计与实现Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。
③收集测试数据用于性能评价;
}
2.2.数据结构
/*内存空闲分区结构块*/
typedefstructnode
intaddr;
//空闲分区的首址
intsize;
//空闲分区的大小
intstatus;
//空闲分区的状态
}block
block*arry_empty_block[2048];
block*arry_apply_block[2048];
2.3.性能指标计算
指标1:
count
count为平均每次申请分配内存时查找符合内存大小的次数。
计算公式:
query_apply_count:
总的查询比较次数
apply_count:
总的申请分配内存次数
指标2:
rate
rate为每1000次对存储设备操作后的平均内存利用率。
all_rate:
总的对内存每次操作后的内存利用率之和
all_conut:
对内存的操作次数包括回收和分配
3.程序清单
1:
变量解释
/*********************************************************************
*full:
空闲分区的状态为满
*empty:
空闲分区的状态为空
*mix:
允许产生的最大申请块
*min:
允许申请的最小申请块
*memory_size:
初始内存大小(256M-56M)
*memory_locate:
累计内存使用量
*query_count_all:
累计比较次数
*memory_empty_count:
空闲分区的内存块数
*memory_apply_count:
申请成功的内存块数
2:
空间利用率函数
*****************************************************************************
*函数名:
*功能:
求空间利用率
*返回值double
*参数:
无
******************************************************************************
函数实现
doublerate()
intsizeloction=0;
for(inti=0;
i<
memory_apply_count;
i++)
{
sizeloction=arry_apply_block[i]->
size+sizeloction;
}
returndouble(double(sizeloction)/204800);
3:
正态分布随机函数
**********************************************************************
*函数名称:
radomNumber
产生服从正态分布的一组随机数
*函数参数:
intaverage(平均数),intvariance(方差)
*返回值:
int
************************************************************************
函数实现:
//根据均值和方差算正态分布随机数
doubleu=((double)rand())/(RAND_MAX)*2-1;
doublev=((double)rand())/(RAND_MAX)*2-1;
doubler=u*u+v*v;
if(r==0||r>
1)returnradomNumber(average,variance);
doublec=sqrt(-2*log(r)/r);
doubleresult=(u*v)*variance+average;
return(int)result;
4:
内存空间初始化函数
/***********************************************************************
ChuShiHuaNC
内存空间初始化函数,构造空闲分区数组
无
voidChuShiHuaNC()
memory_locate=0;
//累计内存使用量置0
query_count_all=0;
//累计比较次数置0
memory_apply_count=0;
//累计申请分配次数置0
memory_empty_count=1;
//空闲分区的内存块数置0
block*block_start=(block*)malloc(sizeof(block));
block_start->
size=memory_size;
addr=0;
//空闲分区的首址置0
status=full;
arry_empty_block[0]=block_start;
5.首次适应算法函数
/************************************************************************
FirstFit
首次适应算法
intsize分配内存空间的大小
int申请的内存空间的起始地址
**************************************************************************
函数流程图:
intFirstFit(intsize)
intreturnResult;
intflag=0;
intlocation_temp;
for(inti=0;
i<
memory_empty_count;
query_count_all++;
intceshi=arry_empty_block[i]->
size;
if(size>
ceshi)
{i++;
elseif(size==arry_empty_block[i]->
size)
{
location_temp=i;
flag=1;
break;
}
elseif(size<
flag=2;
if(flag==1)
//申请空间刚好等于空块
//此时空内存块刚好合适,不用分割
//首先,在申请数组中添加申请块
returnResult=arry_empty_block[location_temp]->
addr;
arry_apply_block[memory_apply_count]=arry_empty_block[location_temp];
memory_apply_count++;
//在空内存数组中去掉该内存块
if(location_temp==memory_empty_count-1)
memory_empty_count--;
else
for(intj=location_temp;
j<
memory_empty_count-1;
j++)
{
arry_empty_block[location_temp]=arry_empty_block[location_temp+1];
}
elseif(flag==2)
//申请空间小于空内存块的大小
block*block_temp=(block*)malloc(sizeof(block));
block_temp->
size=size;
addr=arry_empty_block[location_temp]->
bl