重庆做网站 哪个好些嘛,wordpress 子目录建站,wordpress活动召集插件,wordpress页脚改颜色一个被函数在栈上的情况#xff1a;#xff08;栈从高地址向低地址延伸#xff09;
返回地址#xff08;函数执行结束后#xff0c;会跳转到这个地址执行#xff09; BP#xff08;函数的栈基#xff09;局部变量返回值#xff08;指的是函数返回值#xff0c;eg栈从高地址向低地址延伸
返回地址函数执行结束后会跳转到这个地址执行 BP函数的栈基局部变量返回值指的是函数返回值eg a : function() 这里的a就是返回值golang现在将返回值存到寄存器待确认参数SP函数栈指针
函数栈帧会一次性分配然后通过sp 偏移量的方式来定位位置当一个函数内调用多个函数时会根据最大的函数栈帧来给每个函数分配栈帧。
call指令
在调用函数时编译器会执行call指令call指令主要有两步操作
将下一条指令的地址入栈 这里的下一条指令地址也就是返回地址将ip寄存器指向代码段的被调用函数处
ret指令
当函数执行完成后编译器会执行ret指令
将返回地址弹出跳转到返回地址 一个函数被调用的完整顺序
call指令 —— sp指针向下移动分配足够大栈帧空间 —— 将调用者栈基bp复制入栈为区分记为bp1——将bp1存到寄存器——执行函数——将寄存器的值恢复为bp——释放栈帧—— ret指令 return与defer的执行顺序
return给返回值赋值defer函数执行return返回返回值 详情见幼麟实验室