2012-02-29 11 views
0

MIPS32にリンクリストがあり、ある時点でノードの1つを削除したいとします。 先祖ノードを削除して、ノードの次のノードを指すようにします。 ただし、削除されたノードにはまだいくつかのデータが含まれています。したがって、問題は、そのノードが将来的に使用可能かどうかをどのようにして調べるかです。MIPS32 - メモリの割り当てを解除する

1つの提案は、使用可能なすべてのノードを含む2番目のリンクされたリストを作成することでした。しかし、私はどのようにそのようなリストを実装するつもりですか?また、このリストは、メモリ内のすべての使用可能なスペースを指すか、または削除されたノードの1つだけを指していると思いますか?

同じ結果を達成する他の方法はありますか?

ソリューション

我々はシステムコールを使用してsbrkのサービスを使用して新しいメモリのために、「尋ねる」時はいつでも。ただし、データ構造から何かを削除した場合、削除されたメモリ部分を使用することができます。

解決策は、ノードのリンクリストを再利用できるようにすることです。データ構造から何かを削除するたびに、再使用可能なメモリを追跡するリンクリストにメモリの一部(ノード)を追加します。

したがって、データ構造に何かを追加するときは、「メモリリンクリスト」に再利用可能なノードがあるかどうかを最初に確認します。そうでない場合は、いつものようにsbrkを使用することができます。

+0

なぜ使用可能なノードを削除しますか? – Wiz

+0

私はそれらを取り除きたいとは言わなかった。私は削除されたノードを再び使用可能にしたい。 –

+0

ああ、私は誤読が必要です。再利用可能なノードのプールが必要なだけです。これは、データ構造の問題のほか、何か他のものです。単純な配列であっても、方法の真実性で達成することができます。それは本当にあなたが望むプロパティの種類に依存します。 – Wiz

答えて

0

新しいメモリを "尋ねる"たびに、syscallを使用してsbrkサービスを使用します。ただし、データ構造から何かを削除した場合、削除されたメモリ部分を使用することができます。

解決策は、ノードのリンクリストを再利用できるようにすることです。データ構造から何かを削除するたびに、再使用可能なメモリを追跡するリンクリストにメモリの一部(ノード)を追加します。

したがって、データ構造に何かを追加するときは、「メモリリンクリスト」に再利用可能なノードがあるかどうかを最初に確認します。そうでない場合は、いつものようにsbrkを使用することができます。

関連する問題