если это действительно Вам нужно подсказываю идею.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Romario 07 июля 2003 г. 15:25
В ответ на: Подскажите, плиз, где найти исходники на С для дефрагментации памяти отправлено IVK 07 июля 2003 г. 11:44

берете исходники простейшего менеджера кучи.
там в памяти обычно пишется такая вещь

/* 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;
typedef MemSegm_t *pMemSegm_t;

а функция malloc объявляется так:
void * malloc (u32_t size)


теперь ее модифицируем так:
void * malloc (u8_t**ppPtr,u32_t size)
а структуру объявляем так

/* Descriptor for a segment of memory. */
typedef struct memsegm {
struct memsegm *pPrvSeg; /* Pointer to prev. segment */
struct memsegm *pNxtSeg; /* Pointer to next segment */
u8_t **ppPtr;

u32_t Misc; /* Length and flags */
} MemSegm_t;
typedef MemSegm_t *pMemSegm_t;




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


теперь применяем какие нибудь алгоритмы сортировки памяти, т.е.
переносим память в другое место с помощью memcpy и апдейтим ppPtr;

т.е. при выполнении участка кода

u8_t *mem_ptr;

mem_ptr = malloc(&mem_ptr,sz);
адрес mem_ptr будет запомнен менеджером кучи и при дефрагментации кучи
mem_ptr будет всегда указывать на выделенный фрагмент где бы он не находился в куче.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru