golang中的栈帧

golang中的栈帧
强烈推介IDEA2021.1.3破解激活,IntelliJ IDEA 注册码,2021.1.3IDEA 激活码 

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说golang中的栈帧,希望能够帮助大家进步!!!

这是一个32位的操作系统

在这里插入图片描述

栈帧和栈

栈:启动程序后操作系统分配的空间
栈帧: 当函数运行时,需要存储空间,这些空间就叫做栈帧。

  1. 用来给函数运行提供内存空间,在stack上产生
  2. 当函数调用时,产生栈帧。函数调用结束,释放栈帧
  3. 栈帧存储:1.局部变量 2.形参(形参的地位和局部变量的地位相同) 3.内存字段描述值(栈顶指针,栈基指针)

运行下面的代码,内存分配情况

package mainimport "fmt"func test(t int) { var tt = 123fmt.Println(tt+t)}func main() { var a int = 10var p * int = &atest(5)a = 100fmt.Println(a)*p = 250fmt.Println(*p, a)} 

函数运行内存申请

首先运行main函数,系统会在stack中申请一块栈帧空间(1个函数申请一个栈帧空间),main函数中的操作都在申请到栈帧空间中进行操作
在这里插入图片描述
如果main函数中有其他的函数,操作系统会在stack中的main函数下面依次申请栈帧,然后test函数使用该栈帧申请的空间
在这里插入图片描述

函数结束内存释放

栈帧是有栈顶指针和栈基指针,每次申请栈帧时栈基指针和栈顶指针所记录的位置都会发生变化,如上面的两个图所示,每次运行新的函数就向下移动申请新的空间(同时也会记录该函数的栈顶指针和栈基指针数值),如果该函数运行完则这两个指针会上移,也就是释放内存

本文来源it小白求知路,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/29159

发表评论