去垃圾收集切片的部分吗?

如果我实现这样的队列......


package main


import(

    "fmt"

)


func PopFront(q *[]string) string {

    r := (*q)[0]

    *q = (*q)[1:len(*q)]

    return r

}


func PushBack(q *[]string, a string) {

    *q = append(*q, a)

}


func main() {

    q := make([]string, 0)


    PushBack(&q, "A")

    fmt.Println(q)

    PushBack(&q, "B")

    fmt.Println(q)

    PushBack(&q, "C")

    fmt.Println(q)


    PopFront(&q)

    fmt.Println(q)

    PopFront(&q)

    fmt.Println(q)      

}

...我最终得到一个["A", "B", "C"]没有指向前两个元素的切片的数组。由于切片的“开始”指针永远不会递减(AFAIK),因此永远无法访问这些元素。


Go 的垃圾收集器足够聪明来释放它们吗?


素胚勾勒不出你
浏览 152回答 3
3回答

森栏

简单的问题,简单的答案:不。(但如果你继续推动切片将在某个时候溢出它的底层数组,那么未使用的元素就可以被释放了。)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go