Managing free memory is indeed an interesting problem. Besides the simple free-list approach sketched by the author (sidestepping the first-fit vs. best-fit search strategy, which affects fragmentation, too), I always found the buddy-list to be particularly interesting:
https://en.wikipedia.org/wiki/Buddy_memory_allocation
Unfortunately, the article is not a very good explanation, I remember having seen a drawing of the data structure, but cannot recall from where...
edit:
It turns out that the mentioned jemalloc internally uses buddy lists as well.