【发布时间】:2012-02-29 20:33:38
【问题描述】:
假设我在 MIPS32 中有一个链表,并且在某个时候我想删除其中一个节点。 我这样做是为了使前驱节点指向删除节点的下一个节点。 但是删除的节点仍然包含一些数据。所以问题是我如何确定该节点将来是否可用?
一个建议是创建一个包含所有可用节点的第二个链表。但是,我将如何实施这样的清单?另外,您认为该列表应该指向内存中的所有可用空间还是仅指向已删除的节点之一?
还有其他更好的方法可以达到同样的效果吗?
解决方案:
每当我们“请求”新内存时,我们都会通过系统调用使用 sbrk 服务。但是,如果我们从数据结构中删除了某些内容,我们可能希望使用已删除的内存部分。
因此,一个解决方案可能是拥有一个可重复使用的节点链接列表。每当我们从数据结构中删除某些内容时,我们都会将内存部分(即节点)添加到跟踪可重用内存的链表中。
因此,当我们必须向数据结构中添加某些内容时,我们首先检查“内存链表”中是否有一些可重用的节点。如果不是这种情况,我们可以照常使用 sbrk。
【问题讨论】:
-
为什么要移除可用节点?
-
我并没有说我想删除它们。我希望删除的节点再次可用。
-
哦,我一定是看错了。您只需要一个可重用节点池。这更像是一个数据结构问题,而不是其他任何问题。可以通过多种方式实现,即使使用简单的数组也是如此。这实际上取决于您希望它具有什么样的属性。
-
我明白你的意思。那么我应该说:1-如果有可重用的节点使用那些,否则使用 syscall 调用 sbrk?
-
您应该将解决方案作为答案并接受它,而不是作为问题的一部分。
标签: memory memory-management mips