运行时的存储空间结构:
1、堆区(HeapSpace) 此部分的内容由new语句动态产生。从上往下分配。
2、栈区(StackSpace)此部分的内容由动态链指针连接起来的过程活动记录的链表。其中存放着程序中变量的值,以及过程代码被中断时的中断现场内容。从下往上分配。
当堆区和栈区的界限相交时表示堆-栈区空间已满。
3、静态去(StaticSpace)此部分存放常量值和运行时需要的固定信息。
4、寄存器区(RegisterSpace)此部分用于保存寄存器的信息。
5、目标代码区(CodeSpace)此部分存放源程序的目标代码和库代码。
1
【单选题】程序运行时存储分配策略
1.堆式动态分配申请和释放存储空间要求( )。
A、
先申请的空间先释放
B、
先申请的空间后释放
C、
后申请的空间先释放
D、
任意
正确答案: D
答案解析:
与传统的栈式分配先申请后释放相比,堆式的空间存储并没有对申请空间的释放顺序有要求。
2
【单选题】适合采用静态存储分配策略的程序设计语言的限制有 。
① 数据实体所需空间在编译时能确定 ②过程调用不允许递归
③ 不能动态建立数据实体 ④运行时每个数据对象只能有一个实例
⑤ 数组的上下界是常量
A、
①②③④⑤
B、
①②③④
C、
①②③
D、
①②
正确答案: A
答案解析:
静态存储分配策略即要求在程序开始运行之前就确定好每一个变量存放的位置,因此凡是不能在程序未运行时确定存储空间大小的方式皆为对语言的限制。
3
【单选题】在C语言程序中,局部变量int p存放的位置是______________;语句p=malloc(sizeof(int)*10)申请得到的空间位于______________;全局变量int globalIndex存放的位置是________________;局部变量static int si的存放位置是________________________。
①静态区 ②栈区 ③堆区 ④目标代码区
A、
②④①②
B、
②④①①
C、
②③①②
D、
②③①①
正确答案: D
答案解析:
此试题要求同学们理解和掌握各种变量应该存放于哪些位置,局部变量在过程活动记录中因此在栈区,动态申请空间在堆区,全局变量和静态变量在静态区。
4
【单选题】函数中定义的形参变量的地址分配在( )。
A、
调用者的数据区
B、
被调者的数据区
C、
主程序的数据区
D、
公共数据区
正确答案: B
答案解析:
参数存放在对应的过程活动记录中,即被调过函的数据区。
5
【单选题】下列关于过程活动记录的相关描述错误的是( )。
A、
运行时过程活动记录的管理工作是由编译器生成的目标代码运行时完成的。
B、
若目标机确定,则目标代码生成阶段可以精确计算出每个过程活动记录的大小。
C、
同一个函数被多次调用时所生成的所有过程活动记录的大小一定是相同的。
D、
存在间接递归时,递归调用的函数的多个过程活动记录可能不止一个是活跃的。
正确答案: D
答案解析:
不论怎样的调用顺序和调用过程,每一个函数所对应过程活动记录只有一个是活跃的。
6
【单选题】在编译中,动态存储分配的含义是_____。
A、
在运行阶段对源程序中的量进行分配
B、
在编译阶段对源程序中的量进行分配
C、
在编译阶段对源程序中的量进行分配,在运行时这些量的地址可以根据需要改变
D、
以上都不正确
正确答案: C
答案解析:
在了解了过程活动记录的申请和释放以及变量访问环境之后,可以看出动态存储分配的原则并不完全是在程序运行时确定变量位置,也不仅仅是编译时确定,而是混合的模式,在编译时确定分配的原则,在程序运行时在具体分配地址。因此C为正确答案。