为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
素胚勾勒不出你 2021-09-13 16:14:00
如果我实现这样的队列......package mainimport(    "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 的垃圾收集器足够聪明来释放它们吗?
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

简单的问题,简单的答案:不。(但如果你继续推动切片将在某个时候溢出它的底层数组,那么未使用的元素就可以被释放了。)


查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信