方法表达式汇编
现在研究Method Value究竟怎么实现的?它是怎么持有那两个数据的,另外这两个数据怎么保存下来的?怎么传递的?
type N int
func (n N) Print() {
println(n)
}
func main() {
var n N = 100 // instance
p := &n // n.pointer
f := p.Print // *T = (T + *T) --> autogen func (n *N) Print
n++
println(n, *p)
f()
}
N有个方法Print,在main方法中先创建N的实例n,获得它的指针p,指针p合法的拥有Print方法,当我们执行f()调用的时候,它怎么拿到p,怎么拿到Print?
编译
$ go build -gcflags "-N -l" -o test test.go
$ gdb test
$ l
$ l
$ b 15
$ b 18
$ r
$ info locals #f看上去是栈上的数据,是个指针
$ p/x f-$rsp #f的偏移量是38,是栈上的
$ set disassembly-flavor intel #设置intel样式