?? worstfit.h
字號:
//worst-fit策略函數
void* mm_request(int n)
{
int blocksize;
int maxblocksize=0;
memState *temp;
memState *maxBlock;
temp = head;
maxBlock = head;
while(temp!=NULL) //此循環找出空間最大的空閑塊由maxBlock指向
{
blocksize = temp->end-temp->begin+1;
// maxblocksize = blocksize;
if(temp->state==1&&blocksize>=n&&blocksize>=maxblocksize)
{
maxblocksize=blocksize;
maxBlock = temp;
}
temp=temp->next;
}
//然后將該塊切分
if(maxBlock!=NULL)
{
if(maxblocksize>n) //如果大于拆分
{
memState *addBlock = (memState*)malloc(sizeof(memState)); //將該增加塊插入到header后面
addBlock->before = maxBlock;
addBlock->next = maxBlock->next;
if(maxBlock->next!=NULL)
{
maxBlock->next->before = addBlock;
}
maxBlock->next = addBlock;
addBlock->end = maxBlock->end;
maxBlock->end =(maxBlock->begin+n-1);
maxBlock->state=0; //該塊已經分配
addBlock->begin = maxBlock->end +1;
addBlock->state = 1;//分割剩余塊狀態為可用
//////////////////////////////////////
//該注釋塊內的內容是為測試內存分配效率做準備
blockaddr[count]=&mem[maxBlock->begin];
upDate(); //更新塊對應的內存地址數組
count++;
//////////////////////////////////////
return &mem[maxBlock->begin];
}
else if(maxblocksize==n)
{
maxBlock->state = 0;
//////////////////////////////////////
//該注釋塊內的內容是為測試內存分配效率做準備
blockaddr[count]=&mem[maxBlock->begin];
upDate(); //更新塊對應的內存地址數組
count++;
//////////////////////////////////////
return &mem[maxBlock->begin];
}
}
else
return NULL;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -