да. там обычный список (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Romario 03 октября 2003 г. 15:07
В ответ на: Может знаете хоть одну ее реализацию? отправлено AlexandrY 03 октября 2003 г. 14:55

вот структура которая описывает выделяемый кусок памяти.


/* 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