关于旧数组被遗漏,当 Slice 被引用到新创建的数组时,当 golang 中超过 cap 时

About the old array being left out, when Slice is referenced to a newly created array, when cap is exceeded in golang

提问人:Pranaav S 提问时间:9/30/2023 更新时间:9/30/2023 访问量:41

问:

当创建新数组并且切片或任何其他变量不再引用旧数组时,切片中的基础数组会发生什么情况?

假设,我们创建一个 length=3 且 cap=4 的空切片 然后,当我们尝试附加超出切片容量的元素时。

    slice:=make([]int,3,4)
    slice = append(slice, 6,7) //exceeds the cap, when appending 7 
    fmt.Println(slice)

在上面的程序中,旧数组会发生什么,因为它不再被切片或任何其他变量引用,它的内存会被释放还是会留在内存中直到程序完成执行?

Go 内存 切片

评论

3赞 Volker 9/30/2023
就像所有不再可访问的东西一样:它是 GCed

答:

4赞 Burak Serdar 9/30/2023 #1

如果没有对该数组中任何位置的实时引用,则将对其进行垃圾回收。如果至少有一个对数组中任何一个元素的引用,则该数组将保留在内存中,直到该引用消失。