C语言过程活动记录

C 语言自动提供的服务之一就是跟踪调用链——哪些函数调用了哪些函数,当下一个return语句执行后,控制将返回何处等。解决这个问题的经典机制是堆栈中的活动记录。

当每个函数被调用时,都会产生一个过程记录(或者类似的结构)。过程活动记录是一种数据结构,用于支持过程调用,并记录调用结束以后返回调用点所需要的全部信息。
过程活动记录

每当有一个函数调用时,就会在堆栈(Stack)上准备一个被称为AR(activation recored)的结构,抛开具体编译器实现细节的不同,这个AR基本结构如下所示。 
这里写图片描述

每当遇到一次函数调用的语句,C编译器都会产生出汇编代码来在堆栈上分配这个AR。例如下面的C代码:

void a(int i)
{
    if(i > 0){
        a(--i);
    }
    else
    {
        printf("i = %d 
", 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节

原文地址:https://www.cnblogs.com/zzdbullet/p/9932057.html