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

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

每当有一个函数调用时,就会在堆栈(Stack)上准备一个被称为AR(activation recored)的结构,抛开具体编译器实现细节的不同,这个AR基本结构如下所示。 
C语言过程活动记录

每当遇到一次函数调用的语句,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);
}

在这一段代码中: 
调用的顺序如下:

C语言过程活动记录

C语言过程活动记录

C语言过程活动记录

整体框图为:

C语言过程活动记录

参考:

https://blog.csdn.net/smstong/article/details/50728022

https://blog.csdn.net/uncle_gy/article/details/77920264

C专家编程 6.5节

相关文章:

  • 2022-12-23
  • 2021-05-12
  • 2022-12-23
  • 2021-08-01
  • 2021-04-10
  • 2021-10-20
  • 2021-11-04
  • 2021-07-30
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-05
  • 2021-09-10
  • 2022-01-22
  • 2021-04-06
相关资源
相似解决方案