【总结笔记】函数运行时内存的情况

参考链接:https://zhuanlan.zhihu.com/p/339866296

函数调用与返回信息

假设函数 A 要调用函数 B,控制从函数 A 转移到函数 B,需要有 2 个信息:

  • (1)如何返回:函数 A 对应的机器指令执行到哪里?
    在调用函数 B 时,会将下一条指令的地址压入函数 A 的栈帧
    在这里插入图片描述

  • (2)如何跳转:函数 B 的第一条机器指令所在的地址?
    通过调用 call 指令:call 0x400540

参数传递与返回值

多数情况下参数的传递与获取返回值是通过 寄存器 的,大概寄存区不够用时,将剩下的参数压入调用者的栈帧中,这样被调用函数 B 就可以从执行调用的函数 A 获取到参数:
在这里插入图片描述

局部变量

局部变量的存储与参数的存储一致。先存放在寄存器,若寄存器不够放,则将多余的参数存放进调用者函数 A 的栈帧中。由于寄存器是共享的,所以在将寄存器保存某函数的局部变量时,一定要先将寄存器的初始值存储在调用者函数 A 的栈帧中

由于栈区空间是有限的,所以我们不能创建过多的局部变量。

在这里插入图片描述

posted @ 2022-06-02 23:06  MasterBean  阅读(64)  评论(0)    收藏  举报