0. Access data structures with accessor macros, then turn the heapinfo into several arrays for faster access on machines with addressing modes. Also, this eventually raises the possibility of maintaining multiple heaps. 1. Possible heuristic to catch multiple frees. Introduce an extra word of heapinfo that says whether the remaining info is for something busy or something free. Then we can catch attempts to free already-free large blocks, as well as things not belonging to malloc at all. In the case of a fragment, we can check if the fragment looks like it *already* belongs to the fragment list, by comparing it with the "first" fragment of the block, or checking its "prev" pointer to see if it points into the block. Then if it looks like it might we can exhaustively search the block's free list to see if the fragment is there or not. Extending the heapinfo structure would have the benefit of making it a power of two and thus making array indexing faster, perhaps. Suitably adapted, this heuristic could also catch invalid pointers passed to realloc. All of these additional features require the inclusion of . 3. indirect reference allocator: ialloc(), ifree(), irealloc(). 4. garbage collecting allocator: galloc(), garbage(), gfree(), grealloc().