活动记录
冯诺依曼架构中的编译器需要将所有的 CODE 转换为汇编指令,并为 DATA 分配空间。活动记录是通过编译器实现的,使得程序在运行时,存储或传递:函数或过程的局部变量、返回地址、参数等信息的数据结构,一般是栈帧。
栈帧¶
函数调用栈¶
不同体系结构的 ABI 不同,函数调用栈的约定不一定相同。相同体系结构下的不同编程语言、乃至相同编程语言的不同编译器可能也会为函数调用生成不同的函数调用堆栈。
下面是一个 x86 以及 x64 中 C 语言的函数调用栈帧约定,以供参考:
https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/stack-intro/
利用寄存器,减少内存 I/O¶
栈帧常驻变量¶
不能用寄存器完全替代栈帧的原因。
块状结构¶
块状结构提供对函数的嵌套定义的支持。