函数的指令在编译期间生产,但是function value并不直接指向函数指令入口,而是指向runtime.funcval结构体。这个结构体只有一个地址,就是函数指令的入口地址。
指向funcval,用一个二级指针来调用,这是为了解决闭包问题
闭包:1 必须在函数外部定义,但在函数内部自由调用的变量。2,脱离形成闭包的上下文,也能照常运行。例如:
其中,GO语言通过寄存器DX得到funcval结构体地址
闭包导致局部变量逃逸到堆
函数的指令在编译期间生产,但是function value并不直接指向函数指令入口,而是指向runtime.funcval结构体。这个结构体只有一个地址,就是函数指令的入口地址。
指向funcval,用一个二级指针来调用,这是为了解决闭包问题
闭包:1 必须在函数外部定义,但在函数内部自由调用的变量。2,脱离形成闭包的上下文,也能照常运行。例如:
其中,GO语言通过寄存器DX得到funcval结构体地址
闭包导致局部变量逃逸到堆