?? 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 + -