如何在Go语言中释放内存?

6

我开始学习Go语言,但发现有些问题找不到相关信息。

例如,如果我要创建自己的列表结构

type elem struct {
    prev  *elem
    next  *elem
    value string
}

使用以下方法向其中添加新元素

Current.next = &elem{}

我该如何删除它们?我指的是如何从内存中删除elem的数据,而不仅仅是从列表中删除?

4
Go使用垃圾回收机制,你只需将对象从数据结构中移除即可,无需执行其他操作。 - JimB
1
@JimB,你能解释一下,在什么时候,垃圾收集器会将这些数据识别为垃圾并清理掉吗?(我没明白) - CrazyWu
1个回答

18

Go语言有自带的垃圾回收机制。它会扫描没有指向它的指针的数据并从堆中移除它(垃圾收集器会在程序运行时一直运行)。你唯一需要做的就是:

Current.next = nil

移除所有指向elem{}的指针后,您的elem{}将最终从内存中删除(这不是确定性的。无法准确告知何时释放elem{})。垃圾收集有不同的实现方式;Go的实现随时可能会发生变化。

如果Current超出范围,甚至不需要将next设置为nil


感谢您的好解释。 - CrazyWu
@CrazyWu 不用谢 :) - Arman Ordookhani
current.next = nil 和 current.pre = nil - Xiak
@Xiak 为什么?.prev 一开始就没有被设置。 - Arman Ordookhani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接