目标程序运行时的存储组织与临时变量分配

需积分: 9 2 下载量 39 浏览量 更新于2024-07-31 收藏 172KB PPT 举报
"目标程序运行时的存储组织" 在编程和计算机科学中,目标程序的运行时存储组织是一个关键概念,涉及到程序如何有效地管理和利用内存。本节主要讨论两种参数传递方式以及临时变量的存储分配策略。 首先,参数传递是函数调用时数据交换的方式。有“传值”和“传地址”两种常见方法。 1. 传值:在传值方式下,调用函数时,实际参数(实参)的值被复制到被调函数的形式参数(形参)中。这意味着形参是被调函数内部的局部变量,它们的存储空间在调用时创建,并在调用结束时销毁。实参的原始值不会因函数调用而改变。例如,如果函数接受一个整数作为参数,那么这个整数的副本会被存储在函数的活动记录中,供函数内部使用。 2. 传地址:也称为传引用,这种方式下,函数接收到的是实参存储位置的指针或引用。如果实参是可变对象(如变量),传地址可以允许函数直接修改实参的值。即使是不可变的表达式,如`a + b`,也会先计算其值并存入某个内存位置,然后将该位置的地址传递给函数。函数通过指针间接访问和修改实参,从而影响调用环境。 接下来,我们关注临时变量的存储分配。在编译过程中,为了执行表达式,会生成大量的临时变量。例如,表达式`c[i]`可能会转化为一系列四元式,每个四元式代表一个操作步骤。临时变量的存储分配旨在优化内存使用,避免不必要的浪费。 动态分配法是解决这个问题的一种策略,它并不立即为每个临时变量分配物理存储单元,而是只确定其抽象地址。临时变量分为良性临时变量,即定义点和使用点都在同一个基本块内的变量。这种情况下,可以实现多个临时变量共享同一存储单元,因为它们的活动区(定义点到使用点的范围)不相交。例如,语句`Y:=(A*B+C)*B-D`生成的四元式序列中,每个临时变量的活动区都互不重叠,这样它们就可以共用存储空间,从而节省内存。 此外,还提到了静态链和动态链的概念,这通常与过程调用和存储管理有关。以过程为单位的动态存储分配利用栈结构来管理数据区,每次调用函数时,栈会为新过程创建一个活动记录,保存局部变量和参数。当函数返回时,这部分内存会被弹出,释放给上一级调用者。静态链则通常用于链接子程序的返回地址,以便在递归调用或函数嵌套时正确地返回到调用点。 目标程序运行时的存储组织涉及参数传递机制、临时变量的高效存储分配以及过程调用中的内存管理策略。这些细节对于理解程序的执行效率和内存使用至关重要。