888 Chapter 19 Memory Management
if (leftHeader->Next == leftHeader)
{
// This block is the only free one remaining on the free list.
return;
}
// Remove the coalesced block from the free list. This
// makes the current block appear to be used, which sets
// up for coalescing with the right block and/or for
// adding the coalesced block back to the free list.
header = leftHeader;
header->Next->Prev = header->Prev;
header->Prev->Next = header->Next;
}
// Check if the right memory-adjacent neighbor is free.
// If so, coalesce the two blocks.
HeaderBlock* rightHeader = header + header->Size;
if (rightHeader->Used == false)
{
FooterBlock* rightFooter = rightHeader +
rightHeader->Size - m_fsize;
header->Size += rightHeader->Size;
rightFooter->Size = header->Size;
header->Prev ...