|
вот структура которая описывает выделяемый кусок памяти.
/* Descriptor for a segment of memory. */typedef struct memsegm {
struct memsegm *pPrvSeg; /* Pointer to prev. segment */
struct memsegm *pNxtSeg; /* Pointer to next segment */
u32_t Misc; /* Length and flags */
} MemSegm_t;
при alloc функция malloc просто в цикле ищет свободный кусок памяти необходимого размера. Если его не находит выделяет новый.
при free если кусок памяти находится между двумя занятыми она просто устанавливает флаг освобождения куска памяти (в поле Misc). Если после освобождения текущего куска один из соседних также свободный, происходит объединение их в один свободный кусок (update *pPrvSeg и
*pNxtSeg указателей)
p.s. я никогда не использовал библиотечные alloc/free. От проекта к проекту использую свою реализацию, вернее стыренную из одного kit'a
E-mail: info@telesys.ru