GO 栈

布局

  • return address:函数调用时由call执行自动压榨
  • calls BP:调用者的栈帧基址
  • locals : 函数的局部变量
  • args to callee: 调用函数的返回值和参数
  • B站视频地址

原理

  • 用户执行代码存储到内存的代码段
  • 如果一个函数调用另一个函数,编译器就会生成一条call指令,程序执行这条指令时,会跳转到被调用函数入口处执行,
  • 函数执行完成后通过RET指令跳回调用者处继续执行。
  • go语言函数栈一次分配,防止栈越界,如果需要栈增长,通过函数的检测代码,从新分配栈空间,复制老的栈数据。
  • ret指令前,编译器还会插入指令,恢复调用者栈基地址,释放被调用函数栈空间
  • ret指令作用:弹出call指令压栈的返回地址,跳转到该地址
  • 函数返回前先给返回值赋值,在执行defer函数。

results matching ""

    No results matching ""