C专家编程 第6章 运行的诗章:运行时数据结构 6.5 当函数被调用时发生了什么:过程活动记录

本文详细介绍了C语言运行时系统如何通过过程活动记录(也称为调用帧)来管理函数调用。当函数被调用时,过程活动记录会存储局部变量、参数、返回地址等信息。虽然C语言没有静态链接用于上层引用,但在其他允许嵌套函数的语言中,静态链接用于访问外层函数的局部数据。示例代码展示了递归函数`a`的调用过程,解释了堆栈如何随着函数调用变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    当函数被调用时发生了什么:过程活动记录

    C运行时系统在它自己的地址空间内如何管理程序。
    事实上,C语言的运行时函数非常少,但各个短小精悍。相反的例子是Ada或C++。

    如果C程序需要一些服务(如动态内存分配),它通常必须进行显示请求。这使C成为一种非常高效的语言。但它也向程序员施加了一个额外的负担。 

    C语言自动提供的服务之一就是跟踪调用链---那些函数调用了那些函数,以及当一个return语句执行后,控制将返回何处等。解决这个问题的经典机制就是堆栈中的过程活动记录。当每个函数被调用时,都会产生一个过程活动记录(或类似的结构)。过程活动记录是一种数据结构,用于支持过程调用,并记录调用结束以后返回调用点所需要的全部信息。

    局部变量(local variable)
    参数(argument)
    静态链接(static link)(用于上层引用,C语言不使用) 
    指向先前结构的指针
    返回地址(return address) 
              图6-4 过程活动记录的规范描述
              
    活动记录内容很具有说明性。结构的具体细节在不同的编译器中各有不同,这些字段的次序可能很不相同,而且可能存在一个在调用函数前保存寄存器值的区域。头文件/usr/include/sys/frame.h描述了过程活动记录就在UNIX系统中的样子。在SPARC计算机上,过程活动记录非常大(几十个字),因为它提供了保存寄存器窗口的空间。在x86架构中,过程活动记录多少要小一些。运行时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40186813

你的能量无可限量。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值