Во многих встроенных системах пользовательский менеджер памяти может обеспечить лучшую семантику, чем это доступно в malloc / realloc / free. Например, некоторые приложения могут обойтись простым распределителем меток и выпусков. Держите указатель на начало еще не выделенной памяти, выделяйте объекты, перемещая указатель вверх, и сбрасывайте их, перемещая указатель под ними. Это не сработает, если необходимо отбросить некоторые вещи, оставив после себя другие, выделенные после них, но в ситуациях, когда в этом нет необходимости, распределитель меток и выпусков дешевле, чем любой другой метод выделения. В некоторых случаях, когда распределитель меток и выпусков не достаточно хорош, может быть полезно выделить некоторые вещи из начала кучи и другие вещи из конца кучи; можно освободить вещи, выделенные с одного конца, не влияя на вещи, выделенные с другого.
Еще один подход, который иногда может быть полезен в системах, не использующих многозадачность или совместную многозадачность, - это использование ручек памяти, а не прямых указателей. В типичной системе на основе дескрипторов есть таблица всех выделенных объектов, построенных в верхней части памяти и работающих вниз, а сами объекты размещаются снизу вверх. Каждый выделенный объект в памяти содержит либо ссылку на слот таблицы, которая ссылается на него (если он активен), либо указание на его размер (если он мертв). Запись таблицы для каждого объекта будет содержать размер объекта, а также указатель на объект в памяти. Объекты могут быть распределены путем простого нахождения свободного слота таблицы (легко, поскольку все слоты таблицы имеют фиксированный размер), сохранения адреса слота таблицы объекта в начале свободной памяти, сохранения самого объекта непосредственно за этим и обновления начала свободной памяти, чтобы указать только мимо объекта. Объекты могут быть освобождены путем замены обратной ссылки на указание длины и освобождения объекта в таблице. Если выделение не удастся, переместите все живые объекты, начиная с верхней части памяти, перезаписывая все мертвые объекты и обновляя таблицу объектов, чтобы они указывали на их новые адреса.
Эффективность этого подхода недетерминирована, но фрагментация не является проблемой. Кроме того, в некоторых совместных многозадачных системах может быть возможно выполнять сборку мусора «в фоновом режиме»; при условии, что сборщик мусора может завершить проход за то время, которое требуется для прохода через свободное пространство, можно избежать длительного ожидания. Кроме того, для повышения производительности в среднем случае может использоваться некоторая довольно простая «порождающая» логика за счет производительности в худшем случае.