Вместо этого я предварительно распределяю массив, а затем мне нужен объект, который оборачивает его и отслеживает свободное пространство и выделяет диапазон (пару указателей начала / конца) из распределения, которое я передаю.
Это , в основном , что внутренне делает malloc () (однако, malloc () может увеличить размер этого "предварительно выделенного массива", если он заполнится). Так что да, есть алгоритм для этого. На самом деле их много, и Википедия дает базовый обзор. Различные стратегии могут работать лучше в разных ситуациях. (Например, если все блоки имеют одинаковый размер, или если есть какой-то шаблон для выделения и освобождения)
Если у вас много объектов одинакового размера, посмотрите на препятствия.
Вы, вероятно, не хотите писать код самостоятельно, это не простая задача, и ошибки могут быть болезненными.