2012-02-29 4 views
0

MIPS32에 링크 된 목록이 있고 어느 시점에서 노드 중 하나를 제거하려고한다고 가정합니다. 노드의 다음 노드를 가리 키도록 선행 노드를 만들려면 어떻게해야합니까? 그러나 제거 된 노드에는 여전히 일부 데이터가 있습니다. 그래서 문제는 노드가 미래에 사용할 수 있는지 여부를 어떻게 알 수 있습니까?MIPS32 - 메모리 할당 해제

한 가지 제안은 사용 가능한 모든 노드를 포함하는 두 번째 연결된 목록을 만드는 것이 었습니다. 그러나 그러한 목록을 구현하려면 어떻게해야합니까? 또한이 목록은 메모리의 사용 가능한 모든 공간 또는 제거 된 노드 중 하나만 가리켜 야한다고 생각하십니까?

동일한 결과를 얻는 다른 방법이 있습니까?

솔루션 :

이 때마다 우리는 새로운 메모리 '요구는 "우리는 시스템 콜을 사용하여는 sbrk 서비스를 사용합니다. 그러나 데이터 구조에서 무언가를 제거하면 제거 된 메모리 부분을 사용하려고 할 수 있습니다.

따라서 솔루션은 노드를 다시 사용할 수있는 연결된 목록을 가질 수 있습니다. 데이터 구조에서 무언가를 제거 할 때마다 재사용 가능한 메모리를 추적하는 링크 된 목록에 메모리 부분 (즉, 노드)을 추가합니다.

따라서 데이터 구조에 뭔가를 추가해야 할 때 "메모리 링크 된 목록"에 재사용 가능한 노드가 있는지 먼저 확인합니다. 그렇지 않은 경우 평상시처럼 sbrk를 사용할 수 있습니다.

+0

왜 사용 가능한 노드를 제거 하시겠습니까? – Wiz

+0

나는 그들을 제거하고 싶다고 말하지 않았다. 제거 된 노드를 다시 사용할 수있게하려고합니다. –

+0

오, 나는 잘못 읽었어야합니다. 재사용 가능한 노드 풀만 있으면됩니다. 이것은 데이터 구조 질문에 대한 것입니다. 간단한 배열로도 방법의 진실성을 얻을 수 있습니다. 정말 어떤 종류의 속성을 원 하느냐에 달려 있습니다. – Wiz

답변

0

우리가 새로운 메모리를 물어볼 때마다 우리는 syscall을 사용하여 sbrk 서비스를 사용합니다. 그러나 데이터 구조에서 무언가를 제거하면 제거 된 메모리 부분을 사용하려고 할 수 있습니다.

따라서 솔루션은 노드를 다시 사용할 수있는 연결된 목록을 가질 수 있습니다. 데이터 구조에서 무언가를 제거 할 때마다 재사용 가능한 메모리를 추적하는 링크 된 목록에 메모리 부분 (즉, 노드)을 추가합니다.

따라서 데이터 구조에 뭔가를 추가해야 할 때 "메모리 링크 된 목록"에 재사용 가능한 노드가 있는지 먼저 확인합니다. 그렇지 않은 경우 평상시처럼 sbrk를 사용할 수 있습니다.