变量的地址分配

在编译的语义分析阶段会给出每一个变量的一个相对地址,全局变量的是基于静态数据区基址的偏移量,而局部变量是相对于其运行时所对应活动记录基址的相对地址。
程序的目标代码和全局变量都是在编译时存入静态数据区的。局部变量是程序运行时动态地分配地址的。这个存储的分配是以栈的形式组织的。当某个函数运行时,为其局部数据建立活动记录,并将其入栈。
如果程序设计语言不允许函数的嵌套定义(例如C语言)函数体里肯定是对本函数中的局部变量进行引用或者引用静态数据区的全局变量。要是引用的是本函数中的局部变量,则该变量就在栈顶活动记录中(栈顶永远是正在运行的函数的活动记录)。其偏移量已经在语义分析时确定了。若引用的是全局变量,则直接去静态数据区查找。
如果程序设计语言允许函数的嵌套定义(例如Pascal语言),内层函数还可能引用外层函数中的变量。这时就要根据活动记录里存放的过程层次链来有内层函数向外层函数逐层去查找了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值