O1heap -- constant-complexity real-time memory manager

As a part of my ongoing work on updating Libcanard to support UAVCAN v1.0, I implemented a new memory manager that will replace the old fixed-size block allocator. The new manager is located in a separate small repository to enable the use of Libcanard with other allocators if desired.

The advantage of the new allocator is that it can provide arbitrarily-sized memory fragments (as opposed to the fixed-size block allocators used in the old Libcanard and Libuavcan) while having constant time complexity allocation/deallocation routines and well-characterized worst-case memory fragmentation. Variable-size allocation will significantly simplify the library API (especially when it comes to buffering) and improve the order of time complexity of its internal algorithms.

The library is currently hosted on my private GitHub profile, but it may be moved under the UAVCAN GitHub organization if such is found to be sensible.

1 Like

A related article I just posted in Russian: