📄 test.h
字号:
//测试要求:
//平均请求尺寸
//内存的平均利用率
//找到合适空闲块需要的平均步骤
#include <math.h>
#include "release.h"
#define SIM_STEP 40
float memUseEff(memState *head)
{
memState *temp = head;
float nouse=0;
while(temp!=NULL)
{
if(temp->state==1)//如果该块未被分配
{
nouse=nouse+(temp->end-temp->begin+1);
}
temp=temp->next;
}
return ((float)MEM_SIZE-nouse)/(float)MEM_SIZE;
}
//选择一个已分配的块释放
void *selectBlock()
{
int blocknum;
blocknum = (int)rand()%count;
return blockaddr[blocknum];
}
float test()
{
float efficient=0;
int i,n;
void *p;//释放块的地址
// float mem_inuse; //存放使用的内存数
float mem_notuse; //存放无法分配时的空闲内存数
int flag;
int sim_step = SIM_STEP;
float eff[SIM_STEP];
char *request_success;
/////////////////////////////////////////////////////////////////////////
//测试框架
/////////////////////////////////////////////////////////////////////////
//for (i=0; i<sim_steps; i++)
//{
// do
// {
// 计算请求尺寸n
// mm_request(n);
// }while (request successful);
// 选择待释放块p
// release(p);
//}
//框架先是不断的请求内存直到无法请求内存
//然后释放一块内存,继续请求。。。。
////////////////////////////////////////////////////////////////////////
for(i=0;i<sim_step;i++)
{
flag = 0;
do
{
n = ((int)rand())%(MEM_SIZE+1); //随机产生一个小于最大内存数的值
request_success=(char*)mm_request(n);
request_size_sum += n;
request_step_sum += 1; //计算请求内存总次数
if(flag == 1)
{
request_success_sum +=1; //请求内存成功次数
}
flag = 1;
}while(request_success);
//获得目前内存利用率
//此时内存申请不成功 下面的函数查看未用的内存和已用内存的比例
//求出内存利用率
efficient = memUseEff(head); //计算内存分配的效率
eff[i]=efficient; //保存每次的利用率
p = selectBlock(); //从已分配的块中随机选一块释放
mm_release(p);
}
float sum=0;
for(i = 0;i<sim_step;i++)
{
sum = sum + eff[i];
}
efficient = sum/(float)sim_step; //平均内存利用率
//efficient = mem_inuse/MEM_SIZE ; //内存利用率
return efficient;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -