Я пишу реализацию malloc и хотел знать, может ли кто-нибудь помочь мне с этой проблемой.
В принципе, я хотел бы повторно использовать память после ее выделения с помощью sbrk () и убедившись, чточто память свободна.
Итак, представьте, что моя память такая:
|------------------------------|
... и я делаю некоторые выделения.Когда я выделяю память, у каждого бита есть заголовок (h) и данные (d).
|hddddddhddd---hdd--hddd-------|
Теперь у меня есть эти дыры, и если я хочу использовать, скажем, первый пробел в моей диаграмме, как мне настроить его так, чтобы у него также были голова (h) и тело (dd)?
Я дошел до того, что теперь у меня есть указатель на область памяти Iхочу.В C его указывает указатель.Указатель имеет пользовательский тип, где «meta» - это структура, которую я определил.Так что теперь у меня есть
metaStruct * mypointer = the memory address.
Но когда я пытаюсь сделать
mypointer->size = 30;
или
mypointer->buddy = 1;
, я получаю ошибку сегмента.
вопрос: как мне настроить так, чтобы адрес памяти, выделенный через sbrk (), имел форму моей структуры?Очевидно, я не могу просто пойти myPointer = malloc (sizeof (metaStruct)), потому что я пишу сам malloc.Мне также не интересно, чтобы sbrk () занимал больше места, а скорее использовал существующее пространство, на которое я указываю (я хочу игнорировать его ненужные данные и использовать пространство).
Как сделатьЯ собираюсь сделать это?