C语言过程活动记录

C语言通过过程活动记录(AR)跟踪函数调用链,当函数被调用时,编译器会在堆栈上创建AR,保存返回信息。AR包含返回地址等关键数据,便于函数执行结束后返回调用点。本文介绍了AR的基本结构和C编译器如何在汇编层面处理函数调用。
摘要由CSDN通过智能技术生成

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);
}

在这一段代码中: 
调用的

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值