我写了一个程序,试图学习Go的GC。我认为最初执行mx变量的区域不应该被回收,但我发现这个区域仍然可以通过指针访问。
我的代码有问题吗?
func main() {
fnc()
}
type myStruct struct {
P int64
P2 int64
}
//go:noinline
func fnc() {
mx := &myStruct{100,2} // mx -> 0xc00001c080
my := &myStruct{3,4} // my -> 0xc00001c090
oldmx := uintptr(unsafe.Pointer(mx))
mx = my
runtime.GC()
debug.FreeOSMemory()
oldmxStc := (*myStruct)(unsafe.Pointer(oldmx))
fmt.Println(oldmxStc)
}
HUX布斯
相关分类