Судя по формулировке этого вопроса, вы пытаетесь заново изобрести алгоритм, похожий на mark-sweep для сборки мусора с использованием glibc .Усилия благородны, но сборщики мусора существуют , чтобы удовлетворить эту потребность достаточно аккуратно, и обращение к ним сэкономит вам огромное количество усилий по повторной реализации, если это действительно ваша конечная цель.
Между темтребуемая вам функциональность не существует в спецификации C , и ее реализация в glibc довольно сложна и неуместна .Вам следует обратиться к версии malloc/malloc.c
вашего локального glibc, чтобы определить правильную стратегию, если вы хотите продолжать двигаться вперед в реализации, из-за разных версий, обеспечивающих очень разные гарантии уровня распределителя.Это может быть сделано путем совмещения кода на распределителе, но это, кажется, не идеальное решение вашей проблемы.
Несмотря на то, что он погружен в C ++, этот поток содержит сокровищекуча информации о том, как написать свой собственный менеджер памяти и как оценить хорошую эталонную реализацию, которая является более работоспособной стратегией, если вы не хотите привязывать себя к внутренним компонентам glibc.Я очень рекомендую эту стратегию, потому что она защищает ваше приложение в будущем и абстрагирует желаемую функциональность (таким образом, вы можете в будущем добавить другую библиотеку C).
Удачи в вашем приложении (с).