모든 블록은 크기& 할당 상태가 필요하다.
First fit
p = start;
while ((p < end) && \\\\ not passed end
((*p & 1) || \\\\ already allocated
(*p <= len))) \\\\ too small
p = p + (*p & -2); \\\\ goto next block (word addressed)
Next Fit
Best Fit
void addblock(ptr p, int len) {
int newsize = ((len + 1) >> 1) << 1; // round up to even
int oldsize = *p & -2; // mask out low bit
*p = newsize | 1; // set new length
if (newsize < oldsize)
*(p+newsize) = oldsize - newsize; // set length in remaining
} // part of block
void free_block(ptr p) { *p = *p & -2 }