Красно-черное дерево работает нормально, но это не совсем хороший выбор.
Поскольку для эффективного использования O (размер) байтов требуется O (размер) времени, лучше использовать палец какое-то дерево поиска, которое ускоряет поиск небольших блоков за счет того, что на поиск больших блоков требуется больше времени: https://en.wikipedia.org/wiki/Finger_search_tree
Кроме того, вы, вероятно, просто захотите иметь отдельные бесплатные списки для одни из самых маленьких возможных размеров. Вы можете ожидать попадания в несколько строк кэша при поиске и обновлении дерева поиска. Каждая строка кэша имеет размер 64 байта на x86, поэтому одной строки кэша достаточно для хранения указателей заголовка для 8 свободных списков. Если вы поместите указатели заголовка для свободных списков для 8 наименьших размеров в одну строку кэша, то выделение блоков этих размеров будет намного быстрее.
Это также позволяет вам выделять блоки, которые меньше красно-черного узел дерева.