1、 存储分配的基本概念
- 1、过程:函数和过程的程序单员
- 2、过程的活动:程序的一次执行
- 3、活动记录:一块连续的存储空间,存储过程活动的执行代码和所需信息。
-
名字、环境、状态、存储单元、值的关系
- 解释:
-
活动记录
- 有如下区域:
- 1、返回值区域:存放被调用过程的返回值,通常存放于寄存器以提高效率。
- 2、 实在参数区域(参数区域):存放被调用过程的参数。
- 3、控制链区域:指定调用者的活动记录地址,相当于指向活动记录的指针。用于返回上一个调用对象活动记录中。
- 4、机器状态区域:存储寄存器、程序计数器状态。
- 5、局部数据域:存储局部数据。
- 6、临时数据域:存储计算的中间结果用于表达式的计算。
局部存储分配策略
- 按照变量声明的次序依次分配内存
- 总结:
- 1、最小单位:字节
- 2、变量所需的空间可以根据其类型静态决定
- 3、按照声明变量次序依次分配空间
- 4、局部数据地址可以根据某个位置的相对地址决定
- 5、存储安排还涉及数据对齐问题
- 因为cp1空间溢出了
-
数据对齐
- 数据对齐的k因数据结构规定而有所不同,用空间提高效率。
全局存储分配策略
-
内存地址从高到低
-
三种分配策略
-
1、静态分配策略
-
2、栈式分配策略
-
3、堆式分配策略
-
静态分配策略
-
注:每个活动记录大小是固定的
-
栈式分配策略
-
注:1、上先于下 2、左先于右 3、每个活动对应一个节点
-
注:虚线代表已经凉了的节点(活动)
-
栈类型:
-
1、控制栈:存储当前活跃着的活动(单单是节点)
-
2、运行栈:把控制栈中的信息拓展出来,即存储每一个活跃节点的活动记录(包含节点所需数据)
-
过程:(理解)
-
1、p调用前先保存数据,建立访问链,q初始化局部数据,栈顶和p的控制链(指向p活动记录的指针)被存储
-
-
例题:
-
野指针,会得到随机的垃圾数,篡改不应该改动的内存
-
堆栈分配策略
-
一般涉及垃圾回收机制和new内存空间机制
-
内存分配策略
-
1、定长块
-
2、不定长块(变长块)
-
分配算法