It seems you are thinking of 256 bytes of metadata in the form of a bitmap to track free / in use byte by byte.
I would consider the following as one of the possible alternatives:
I would start by looking at a heap of 2048 bytes in the form of 1024 "pieces" of 2 bytes. This gives you 2 bits of information for each fragment. You can treat the first of them as meaning whether this fragment is used, and the second means whether the next fragment is part of the same logical block as the current one.
When you call the free function, you use the passed address to find the correct starting point in your bitmap. Then you go through the bits, designating each piece as free until you reach where the second bit is set to 0, indicating the end of the current logical block (i.e., the next 2-byte piece is not part of the current logical block).
[Unfortunately, I just noticed that Ross Ridge has already proposed almost the same basic idea in the commentary.]
source share