It was written from scratch by the FPC developers, but to a known, common pattern: bucketlist based allocators. The same pattern is e.g. used in Delphi too, with a completely different implementation based on FastMM. I have also seen implementations for C and C++, but in these languages the default is a simple heap based allocator. we can use that too: the implementation is in cmem.pas.
Bucket based allocators are less prone to heap memory fragmentation in the average use case.
In compiler shoot-outs, languages that have bucket based allocators usually have more efficient use of memory sizes, whereas heap based memory allocators favor speed over memory size.
a note of warning, though: the choice of a memory manager may depend on a specific use case.