假如我有一个slice,然后其中若干个元素地址被引用,那么其他的元素会被垃圾回收吗
ss := []string{"1", "2", "3", "4"}
ref := &ss[2]
例如这样的一个操作,gc时ss会被垃圾回收吗
有疑问加站长微信联系(非本文作者)

假如我有一个slice,然后其中若干个元素地址被引用,那么其他的元素会被垃圾回收吗
ss := []string{"1", "2", "3", "4"}
ref := &ss[2]
例如这样的一个操作,gc时ss会被垃圾回收吗
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
`单行代码`
方向,Go的GC很智能的.
不会,ss底层数组被引用,整个数组都不会被释放
我之前也是这样想的,但是仔细想想,ss本身是不可达的,程序运行到后面,ss本身是没有被引用的,所有有点疑惑
https://golang.google.cn/pkg/reflect/#SliceHeader
这是slice的内部结构,我的理解是slice的data指针只有一个,表示底层数组,在gc的时候如果检测到data有被引用就不会被回收,gc最左管理到这个data数组,他不会管到数组的某个元素,不过你的例子是string slice,对于string感觉比较特殊,可以写个例子测试一下,开启gctrace看看结果
我测试了一下,可以看出确实没有被回收
多谢,没有看完整本的go编程,之前没找到查看gc的方法