问题背景
在项目开发过程中,有一个需求是,本月的数据/本年的数据,然后将结果展示,在获取本年数据的时候,会回调本月数据的获取数据方法,代码实现后,发现,数据一直是百分百,当时怀疑是回调的时候出问题了,以为是获取年度数据的时候,把月度数据覆盖掉了,导致两个数据一样,一直是百分百。但其实回调完全不会产生这种原因,关键点就在于栈帧,每一个方法的调用,都会有一个新的栈帧,而方法处理的时候,就在这个栈帧里,相当于是一个黑盒。完全不会对外部的方法造成影响。当时对栈帧没什么了解,现在了解了,做一下记录。
栈帧是什么?
栈帧是计算机程序调用函数得时候,在栈中开辟得一块专门存储函数信息得内存区域。
这块区域用于存储函数相关得信息。包括但不限于以下信息:
- 函数得局部变量
- 函数得参数
- 返回地址,即函数执行完毕后程序应返回继续执行得位置
- 前一个栈帧得指针:用于标识调用该函数得上一个函数得栈帧位置
- 寄存器状态:保证函数调用前后得一致性
栈帧得创建和销毁按照LIFO得原则进行,确保了函数调用和返回过程中得正确性和高效性。每当一个函数被调用得时候,一个新的栈帧就会被压入栈中,当函数调用结束后,栈帧被弹出,恢复到调用该函数前得状态。
这种机制对于支持递归调用等复杂函数调用模式尤为重要。