模拟内存管理设计与实现Word文件下载.docx

上传人:b****4 文档编号:13546320 上传时间:2022-10-11 格式:DOCX 页数:29 大小:283.24KB
下载 相关 举报
模拟内存管理设计与实现Word文件下载.docx_第1页
第1页 / 共29页
模拟内存管理设计与实现Word文件下载.docx_第2页
第2页 / 共29页
模拟内存管理设计与实现Word文件下载.docx_第3页
第3页 / 共29页
模拟内存管理设计与实现Word文件下载.docx_第4页
第4页 / 共29页
模拟内存管理设计与实现Word文件下载.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

模拟内存管理设计与实现Word文件下载.docx

《模拟内存管理设计与实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《模拟内存管理设计与实现Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。

模拟内存管理设计与实现Word文件下载.docx

③收集测试数据用于性能评价;

}

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1