运行存储分配概述
哈尔滨工业大学 陈鄞
第七章 运行存储分配
编译器在工作过程中,必须为源程序中出现的一些数据对
象分配运行时的存储空间
对于那些在编译时刻就可以确定大小的数据对象,可以在
编译时刻就为它们分配存储空间,这样的分配策略称为静
态存储分配
反之,如果不能在编译时完全确定数据对象的大小,就要
采用动态存储分配的策略。即在编译时仅产生各种必要的
信息,而在运行时刻,再动态地分配数据对象的存储空间
栈式存储分配
堆式存储分配
运行存储分配策略
静态和动态分别对应
编译时刻和运行时刻
运行时内存的划分
静态代码区
静态数据区
栈(Stack )区
堆(Heap)区
动
态
数
据
区
域
空闲内存
使用过程(或函数、方法)作为用户自定义动作的单元的
语言,其编译器通常以过程为单位分配存储空间
过程体的每次执行称为该过程的一个活动(activation )
过程每执行一次,就为它分配一块连续存储区,用来管
理过程一次执行所需的信息,这块连续存储区称为活动
记录(activation record )
活动记录
活动记录的一般形式
实 参
临时变量
控制链
访问链
保存的机器状态
局部数据
指向调用者的活动记录
用来访问存放于其它活
动记录中的非局部数据
返回值