最佳适应算法( Best Fit) 空闲区:首址递增排列 空闲区首址空闲区长度 申请:取最小可满足区域; 128 64 优点:尽量使用小空闲区 256 32 保持大空闲区。 1024 256 缺点:可能形成碎片 (fragment) 0 Eg申请30将留下长 度为2的空闲区
最佳适应算法(Best Fit) 空闲区:首址递增排列; 申请:取最小可满足区域; 优点:尽量使用小空闲区, 保持大空闲区。 缺点:可能形成碎片 (fragment)。 Eg. 申请30将留下长 度为2的空闲区。 空闲区首址 空闲区长度 128 64 1024 256 256 32 0 ...
最坏适应算法( Worst fit) 空闲区:首址递增排列; 空闲区首址空闲区长度 申请:取最大可满足区域; 128 64 优点:防止形成碎片。 256 32 缺点:分割大空闲区域。 1024 256 0
最坏适应算法(Worst Fit) 空闲区:首址递增排列; 申请:取最大可满足区域; 优点:防止形成碎片。 缺点:分割大空闲区域。 空闲区首址 空闲区长度 128 64 1024 256 256 32 0 ...
UNⅨ存储分配-FF struct map i char *m size char m adar struct map coremap CMaPsizi struct map swapmap SmaPsiz define Cmapsiz 100 define SmaPsiz 100
UNIX存储分配--FF struct map { char *m_size; char *m_addr; }; struct map coremap[CMAPSIZ]; struct map swapmap[SMAPSIZ]; define CMAPSIZ 100 define SMAPSIZ 100
malloc(mp, size) struct map, mp i register int a register struct map *bp for(bp=mp; bp->m size; bp++i if (bp-m size >=size)( a=bp->m addr r p->m addr bp SIze, if((bp->m size =-size)==0) do i bp+ (bp-1)->m addr= bp->m addr I while((bp-1)->m size =bp->m size) return(a) return(O)
malloc(mp,size) struct map, *mp; { register int a; register struct map *bp; for(bp = mp; bp->m_size; bp++){ if (bp-m_size >= size) { a=bp->m_addr; bp->m_addr =+ size; if ((bp->m_size =- size) == 0) do { bp++; (bp-1)->m_addr = bp->m_addr; }while((bp-1)->m_size = bp->m_size); return(a); } } return(0); }
free(mp, size, aa struct map map i register struct map bp register int t, a a= aa for(bp=mp; bp->m addr<=a & bp->m size =0; bp++) f(bp>mp&&(bp-1)->madr+(bp-1)→>msze=a){/与前合并 (bp-1)->m size = size if(a+size=bp> m addr){∥前后合并 (bp-1)->m size =+ bp->m size; while(bp->m size)& bp+ (bp-1)->m addr= bp->m addr; (bp-1)->m size= bp->m size;
mfree(mp,size,aa) struct map *map; { register struct map bp; register int t,a; a = aa; for(bp=mp; bp->m_addr<=a && bp->m_size !=0; bp++); if(bp>mp && (bp-1)->m_addr+(bp-1)->m_size == a) { //与前合并 (bp-1)->m_size =+ size; if (a+size == bp->m_addr){ //前后合并 (bp-1)->m_size =+ bp->m_size; while (bp->m_size) { bp++; (bp-1)->m_addr = bp->m_addr; (bp-1)->m_size = bp->m_size; } } }