yyy*_*yyy 5 garbage-collection go
给出以下 golang 代码:
type Pointer struct { x, y int }
func foo(p *Pointer) *int {
return &p.y
}
Run Code Online (Sandbox Code Playgroud)
CompilerExplorer显示return &p.y编译为
TESTB AL, (AX)
ADDQ $8, AX
RET
Run Code Online (Sandbox Code Playgroud)
这很容易理解。TESTB是空检查,然后通过添加to的偏移量来ADDQ生成指向的指针。p.yPointer::yp
我不明白的是,给定一个指向 的指针p.y,垃圾收集器如何知道它不仅仅是一个任意的*int,而是一个指向 a 的指针Pointer::y,因此p只要指向的指针p.y仍然存在,它就必须保持活动状态?