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]
。