研究生院第七章精选.ppt

存储分配策略(15) 堆中,活跃的活动记录不一定相临,可能存在空洞 存储分配策略(16) 堆的释放 不释放 存储空间溢出时停止 显式释放 Free(C,PL/1),deallocation(Ada)… 有可能引起悬挂引用 隐式释放 单引用 引用计数 垃圾收集(Garbage collection) 堆的分配和释放的优化 访问非局部名字(1) 如何通过活动记录正确访问名字,满足作用域的要求? 两种作用域 静态作用域 根据程序正文决定用于名字的声明 最接近的嵌套规则 程序块 非局部名字的访问:访问链 动态作用域 在运行时,根据现行的活动来决定用于名字的声明,如Lisp等 访问非局部名字(2) 程序块 定义: 起源于Algol C语言中的定义:{ declarations statements } 允许嵌套 最接近的嵌套规则: 程序块B中声明的作用域包括B 如果名字x没有在B中声明,则B中x的出现是在外围程序块B’的x声明的作用域中,且满足: B’有x的声明 B’比其它任何含x声明的程序块更接近被嵌套的B 访问非局部名字(3) 例:非局部名字的引用 main( ) { int a = 0; int b = 0; { int b = 1; { int a = 2; printf(“%d, %d\n”, a, b); } { int b = 3; printf(“%d, %d\n”,

文档评论(0)

1亿VIP精品文档

相关文档