函数的指令在编译期间生产,但是function value并不直接指向函数指令入口,而是指向runtime.funcval结构体。这个结构体只有一个地址,就是函数指令的入口地址。

指向funcval,用一个二级指针来调用,这是为了解决闭包问题
闭包:1 必须在函数外部定义,但在函数内部自由调用的变量。2,脱离形成闭包的上下文,也能照常运行。例如:

其中,GO语言通过寄存器DX得到funcval结构体地址

闭包导致局部变量逃逸到堆

Go语言中的函数值不直接指向函数指令,而是通过runtime.funcval结构体,这个结构体存储了函数入口地址。闭包的实现依赖于这种机制,确保即使在函数执行后仍能访问到其作用域内的变量。当闭包存在时,局部变量可能因此逃逸到堆上,以保持其生命周期。Go语言通过寄存器DX获取funcval结构体地址来调用函数。
函数的指令在编译期间生产,但是function value并不直接指向函数指令入口,而是指向runtime.funcval结构体。这个结构体只有一个地址,就是函数指令的入口地址。

指向funcval,用一个二级指针来调用,这是为了解决闭包问题
闭包:1 必须在函数外部定义,但在函数内部自由调用的变量。2,脱离形成闭包的上下文,也能照常运行。例如:

其中,GO语言通过寄存器DX得到funcval结构体地址

闭包导致局部变量逃逸到堆

1053
832
8684

被折叠的 条评论
为什么被折叠?