Tiger编译器中的栈帧管理与优化
1. 栈帧调用与访问机制
在程序执行过程中,函数调用和变量访问涉及一系列栈帧操作。例如, show 函数会将其静态链接(即 prettyprint 函数栈帧的地址)存储到自身栈帧中。当 show 调用 indent 时,会将自身的栈帧指针作为 indent 的静态链接传递;而当 show 递归调用自身时,传递的是自身的静态链接而非栈帧指针。
indent 函数在执行时,会从 show 函数的栈帧中获取值 n ,具体做法是从 indent 的静态链接(指向 show 函数的栈帧)的适当偏移处进行取值。当 indent 调用 write 时,需要传递 prettyprint 函数的栈帧指针作为静态链接,这需要先从自身静态链接(即 show 函数的栈帧)的偏移处获取传递给 show 的静态链接。此外, indent 还会使用 prettyprint 函数栈帧中的变量 output ,具体步骤是先从自身静态链接开始,获取 show 的静态链接,再从中获取 output
超级会员免费看
订阅专栏 解锁全文
33

被折叠的 条评论
为什么被折叠?



