活动记录

冯诺依曼架构中的编译器需要将所有的 CODE 转换为汇编指令并为 DATA 分配空间活动记录是通过编译器实现的使得程序在运行时存储或传递函数或过程的局部变量返回地址参数等信息的数据结构一般是栈帧

栈帧

函数调用栈

不同体系结构的 ABI 不同函数调用栈的约定不一定相同相同体系结构下的不同编程语言乃至相同编程语言的不同编译器可能也会为函数调用生成不同的函数调用堆栈

下面是一个 x86 以及 x64 中 C 语言的函数调用栈帧约定以供参考

https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/stack-intro/

利用寄存器减少内存 I/O

栈帧常驻变量

不能用寄存器完全替代栈帧的原因

块状结构

块状结构提供对函数的嵌套定义的支持

Tiger 语言的栈帧