Every allocation = hidden metadata user data.
We return (metadata sizeof(meta)) to the user.
Metadata holds: block size, free flag, and pointer to next block → a linked list of all chunks.
Now we can walk the list, reuse free blocks, and actually implement free() .