Go 如果片的容量已被不安全的.Pointer修改,那么剩余内存能否被垃圾收集重用?

Go 如果片的容量已被不安全的.Pointer修改,那么剩余内存能否被垃圾收集重用?,go,garbage-collection,Go,Garbage Collection,想想这个例子: s := make([]byte, 512, 1024) (*reflect.SliceHeader)((unsafe.Pointer(&s))).Cap = 512 GC是否可以收集最后512字节的内存 不管是不是,为什么 据我所知,当前垃圾收集器不会收集部分片段或字符串。以下情况也是如此: s=s[:512:512] // Like your example but idiomatically starting in Go1.3 s=s[128:] // first

想想这个例子:

s := make([]byte, 512, 1024)
(*reflect.SliceHeader)((unsafe.Pointer(&s))).Cap = 512
GC是否可以收集最后512字节的内存


不管是不是,为什么

据我所知,当前垃圾收集器不会收集部分片段或字符串。以下情况也是如此:

s=s[:512:512] // Like your example but idiomatically starting in Go1.3
s=s[128:] // first 128 elements are not collected.

您不需要使用
不安全的.Pointer
来更改片的容量。您可以简单地使用重新切片表达式,如
s[:512:512]