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