6.1局部存储分配 main0/*例* 声明作用域 1/* begin of Bo*/ int a=0; B-B Int a=09 int b=0: B-B int b=0 i/ begin of b,*/ int b=1: B-B int b=1: int a= 2: B 1* begin of B2*/ int b= 3 B int a=2 y/*end of b2*/ 1* begin of B3*/ int b=3 b 3/* end of B3*/ as b y/*end of b,*/ /*k end of B.*/ 重叠分配存储单元
6.1 局部存储分配 main() / 例 / { / begin of B0 / int a = 0; int b = 0; { / begin of B1 / int b = 1; {/ begin of B2 / int a = 2; }/ end of B2 / {/ begin of B3 / int b = 3; }/ end of B3 / }/ end of B1 / }/ end of B0 / 声 明 作 用 域 int a = 0; B0 − B2 int b = 0; B0 − B1 int b = 1; B1− B3 int a = 2; B2 int b = 3; B3 a0 b0 b1 a2 , b3 重叠分配存储单元
62全局栈式存储分配 本节介绍 介绍程序运行时所需的各个活动记录在存储 空间的分配策略 描述过程的目标代码怎样访问绑定到局部名 字的存储单元 介绍三种分配策略 静态分配策略 栈式分配策略 堆式分配策略
6.2 全局栈式存储分配 本节介绍 • 介绍程序运行时所需的各个活动记录在存储 空间的分配策略 • 描述过程的目标代码怎样访问绑定到局部名 字的存储单元 • 介绍三种分配策略 – 静态分配策略 – 栈式分配策略 – 堆式分配策略
62全局栈式存储分配 621运行时内存的划分 代码 静态数据 堆 栈
6.2 全局栈式存储分配 6.2.1 运行时内存的划分 代 码 静 态 数 据 堆 栈
62全局栈式存储分配 1、静态分配 名字在程序被编译时绑定到存储单元,不需 要运行时的任何支持 绑定的生存期是程序的整个运行期间
6.2 全局栈式存储分配 1、静态分配 • 名字在程序被编译时绑定到存储单元,不需 要运行时的任何支持 • 绑定的生存期是程序的整个运行期间
62全局栈式存储分配 2、静态分配给语言带来限制 递归过程不被允许 数据对象的长度和它在内存中位置的限制, 必须是在编译时可以知道的 数据结构不能动态建立
6.2 全局栈式存储分配 2、静态分配给语言带来限制 • 递归过程不被允许 • 数据对象的长度和它在内存中位置的限制, 必须是在编译时可以知道的 • 数据结构不能动态建立