C语言过程活动记录
C 语言自动提供的服务之一就是跟踪调用链——哪些函数调用了哪些函数,当下一个return语句执行后,控制将返回何处等。解决这个问题的经典机制是堆栈中的活动记录。
当每个函数被调用时,都会产生一个过程记录(或者类似的结构)。过程活动记录是一种数据结构,用于支持过程调用,并记录调用结束以后返回调用点所需要的全部信息。
每当有一个函数调用时,就会在堆栈(Stack)上准备一个被称为AR(activation recored)的结构,抛开具体编译器实现细节的不同,这个AR基本结构如下所示。
每当遇到一次函数调用的语句,C编译器都会产生出汇编代码来在堆栈上分配这个AR。例如下面的C代码:
void a(int i) { if(i > 0){ a(--i); } else { printf("i = %d \n", i); } } int main(int argc, char** argv) { a(1); }
在这一段代码中:
调用的顺序如下:
整体框图为:
参考:
https://blog.csdn.net/smstong/article/details/50728022
https://blog.csdn.net/uncle_gy/article/details/77920264
C专家编程 6.5节