首页 > 文章列表 > 关于golang中Slice超出容量时,旧数组被遗漏的问题

关于golang中Slice超出容量时,旧数组被遗漏的问题

407 2024-03-02
问题内容

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

假设我们创建一个长度为 3 且上限为 4 的空切片 然后当我们尝试附加一个超出切片容量的元素时。

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

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

正确答案


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