用slice作队列,pop出队头之后,对应的内存会被回收吗?

来源:3-3 切片的操作

慕哥4405024

2018-11-14

老师:
我们经常使用slice来作队列,就像后面的爬虫也是用slice来作队列的。它会经常有如下代码:

var aQ []int
//入队
aQ = append(aQ, 1,2,3,4, aSlice...)
//出队
aQ = aQ[1:]
aQ = aQ[1:]...

因为我们这个slice的出队操作新的slice和旧的slice还是公用底层的数组,在多次入队和出队操作之后,有很长的队头是没有用了的,系统会回收回去吗?
图片描述

写回答

1回答

慕哥4405024

提问者

2018-11-14

好像我知道了,在append超过cap的时候,会把旧的有用的部分复制到新的内存中,旧的内存由于没有人引用了,会被系统自动回收回去,所以用slice作队列不会存在 底层数组不停地增长,而有用的部分很少的情况。

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程