★★★ C语言的首次匹配(first fit),改"最佳适配"和"最差适配", up有分 ★★★
/////////////////////////////////////////////////////////////////
下面这个程序是C语言的首次匹配(first fit)写的。
想改为最佳适配(best fit)和最差适配(worst fit)
已经很多天了,还是不成功。请高人指点。
/////////////////////////////////////////////////////////////////
首次匹配(first fit),按分区的先后次序,从头查找,找到符合要求的第一个分区
最佳适配(best fit),找到其大小与要求相差最小的空闲分区
最差适配(worst fit),找到最大的空闲分区
/////////////////////////////////////////////////////////////////
void *mm_request( UINT sz )
{
void *pRet = NULL;
struct VListHead *pTmpList = listHead.next;
sz = (sz+3)/4+2;//转换为DWORD数,再加上2个DWORD的附加信息
if (sz < 4 )//最小块是4个DWORD
{
sz = 4;
}
while ( pTmpList != &listHead )//遍历空闲表(首次匹配)
{
UINT *pBlockHead = (UINT*)pTmpList - 1;
UINT objSz = GetBlockHeadSize(pBlockHead);
if ( objSz >= sz )//找到满足要求的空闲块
{
pRet = pTmpList;
UseBlock( pBlockHead );//设置使用标记
delList(pTmpList);
break;
}
pTmpList = pTmpList->next;
}
return pRet;
}