Возникли проблемы с написанием моего собственного malloc, free и realloc - PullRequest
1 голос
/ 27 октября 2009

У меня возникли проблемы с реализацией моего собственного динамического распределителя памяти, использующего неявный список для отслеживания свободных блоков в c. **** В частности, у меня проблемы с реализацией realloc и , меняющего код с поиска-соответствия / первого соответствия на следующее соответствие. Лучше всего подойдет идеальный вариант, но давайте просто скажем, что сейчас подходит. У меня есть все, что угодно, только эти две вещи ...

подробнее ...

Я пытаюсь реализовать собственную версию динамического распределителя памяти со своими собственными версиями malloc , free и realloc ... There Для отслеживания свободных блоков в динамическом распределителе памяти используются четыре метода. Первый из них, который у меня есть, это неявный список, который использует заголовок. Для нахождения свободного блока в неявном списке есть несколько политик размещения , которые могут быть включены в неявный список. Первый из них называется first fit или find fit, который находится в приведенном ниже коде ... он ищет в списке с начала и выбирает первый свободный блок, который подходит. Следующий метод называется next fit, который у меня возникают проблемы при попытке реализовать, и этот метод похож на first fit, но вместо того, чтобы начинать каждый поиск в начале списка, он начинает каждый поиск, где предыдущий поиск был прерван. Наконец, есть Best fit ... это был бы идеальный метод для меня, но я знаю, что он довольно сложный и довольно трудный, поэтому я возьму только следующую подгонку, но, если есть кто-то, кто знает, как реализовать наилучшую подгонку в неявном списке ПОЖАЛУЙСТА, не стесняйтесь размещать его. Best fit проверяет каждый свободный блок и выбирает свободный блок с наименьшим размером, который подходит ... Я знаю, что для Best fit можно исключить нижние колонтитулы в выделенных блоках ... в основном потому, что они действительно не нужны ... I Я просто не совсем уверен, как это сделать ...

Я понимаю, что это много кода, но я просто хотел поместить все сразу, чтобы ничего не пропустить.

Я оставил место для realloc, который возвращает NULL и находится где-то посередине кода, а find_ fit, который я хочу изменить на метод политики размещения next_fit, находится внизу ...

Любая помощь будет принята с благодарностью ... Спасибо.

Код находится на этом веб-сайте ... извините ... У меня было много проблем с размещением кода здесь ... даже более того, поскольку он такой большой ... Я просто использовал Google, чтобы он выглядел более достоверным. ..

DMA CODE

Я четко обозначил разделы в коде на веб-сайте, чтобы не было проблем с поиском realloc и методов поиска соответствия ...

Ответы [ 4 ]

1 голос
/ 27 октября 2009

Мой собственный код - это всего лишь банкомат с временной задержкой реализации, не очень эффективный по сравнению с другими решениями (dlmalloc () и др.).

Это алгоритм точной подгонки, первой подгонки, но он должен быть тривиальным, чтобы расширить часть «запомните первую подгонку в случае, если у вас нет точной подгонки» в строках 63–71 для лучшей обработки подходят:

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

Код находится под лицензией Public-Domain-alike, то есть вы можете использовать его по своему усмотрению.

1 голос
/ 27 октября 2009

Best-fit не очень подходит для многих целей, но если вы действительно этого хотите, его довольно легко реализовать. Когда вы добавляете блоки в свой свободный список, вставляйте их в порядке, отсортированном по размеру. Затем, при попытке выделить блок, поиск с первым соответствием также дает наилучшее соответствие.

1 голос
/ 27 октября 2009

Наивным способом решения realloc было бы заставить realloc вызывать вас функцию malloc и просто копировать данные, но я думаю, вы ищете более сложное решение?

0 голосов
/ 28 октября 2009

Если вы не делаете домашнее задание, почему вы не используете valgrind для устранения проблем с памятью? Или если вам нужна более специальная версия malloc, почему вы не начинаете с отладочной версии Дейва Хансона malloc?

Если вы делаете домашнее задание, почему вы не сказали нам?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...