2012-02-29 5 views
0

Предположим, у меня есть связанный список в MIPS32, и в какой-то момент я хочу удалить один из узлов. Что я делаю, чтобы узел предшественника указывал на удаленный узел следующего узла. Однако удаленный узел все еще содержит некоторые данные. Итак, вопрос в том, как выяснить, можно ли использовать этот узел в будущем или нет?MIPS32 - освободить память

Одно из предложений заключалось в создании второго связанного списка, содержащего все используемые узлы. Однако как бы я пошел на реализацию такого списка? Кроме того, как вы думаете, этот список должен указывать на все полезное пространство в памяти или только на один из удаленных узлов?

Есть ли другой лучший способ добиться того же результата?

Решение:

Всякий раз, когда мы «спросить» для новой памяти мы используем службу sbrk с помощью системного вызова. Однако, если мы удалили что-то из нашей структуры данных, мы можем использовать эту удаленную часть памяти.

Таким образом, решение может заключаться в наличии связанного списка узлов, которые могут быть повторно использованы. Всякий раз, когда мы удаляем что-то из нашей структуры данных, мы добавляем часть памяти (т. Е. Узел) в связанный список, который отслеживает повторно используемую память.

Поэтому, когда мы должны что-то добавить к нашей структуре данных, мы сначала проверяем, есть ли какой-нибудь повторно используемый узел в нашем «связанном с памятье списке». Если это не так, мы можем использовать sbrk, как обычно.

+0

Почему вы хотите удалить используемые узлы? – Wiz

+0

Я не сказал, что хочу их удалить. Я хочу, чтобы удаленные узлы снова можно было использовать. –

+0

О, я, должно быть, неправильно понял. Вам просто нужен пул многоразовых узлов. Это скорее вопрос структуры данных, чем что-либо еще. Может быть достигнуто с точки зрения путей, даже с помощью простого массива. Это зависит от того, какие свойства вы хотите иметь. – Wiz

ответ

0

Всякий раз, когда мы «запрашиваем» новую память, мы используем службу sbrk, используя системный вызов. Однако, если мы удалили что-то из нашей структуры данных, мы можем использовать эту удаленную часть памяти.

Таким образом, решение может заключаться в наличии связанного списка узлов, которые могут быть повторно использованы. Всякий раз, когда мы удаляем что-то из нашей структуры данных, мы добавляем часть памяти (т. Е. Узел) в связанный список, который отслеживает повторно используемую память.

Поэтому, когда мы должны что-то добавить к нашей структуре данных, мы сначала проверяем, есть ли какой-нибудь повторно используемый узел в нашем «связанном с памятье списке». Если это не так, мы можем использовать sbrk, как обычно.