静态绑定和动态绑定 ■静态绑定:在程序运行前建立的约束 ■动态绑定:在程序执行过程中建立的约東 哪些特征能静态绑定,或者必须动态绑定,不同 语言之间差别很大 口一般而言,静态绑定效率高、意义清晰,动态绑定更 灵活 口静态绑定的语言一般是编译执行 口动态绑定的语言一般是解释执行 面重点讨论变量的绑定,以下用对象表示任何 有名字的东西
静态绑定和动态绑定 ◼ 静态绑定:在程序运行前建立的约束 ◼ 动态绑定:在程序执行过程中建立的约束 ◼ 哪些特征能静态绑定,或者必须动态绑定,不同 语言之间差别很大 一般而言,静态绑定效率高、意义清晰,动态绑定更 灵活 静态绑定的语言一般是编译执行 动态绑定的语言一般是解释执行 ◼ 下面重点讨论变量的绑定,以下用对象表示任何 有名字的东西
生存期和作用域 ■绑定的生存期是一个绑定从创建到销毁的时间。 口创建和销毁可能伴有特定的动作(例:常量创建时需 要给定值) ■绑定的作用域是一个绑定在程序中活跃的文本区 域 作用域本身指程序中没有绑定被销毁的一段最大 的程序区域。(后面再讨论) 常见作业域 口子程序(函数和过程) 口模块 口模块类型 类块
生存期和作用域 ◼ 绑定的生存期是一个绑定从创建到销毁的时间。 创建和销毁可能伴有特定的动作(例:常量创建时需 要给定值) ◼ 绑定的作用域是一个绑定在程序中活跃的文本区 域。 ◼ 作用域本身指程序中没有绑定被销毁的一段最大 的程序区域。(后面再讨论) ◼ 常见作业域 子程序(函数和过程) 模块 模块类型 类 块
子程序 ■在大多数带子程序的语言中,子程序入口 打开一个新的作用域。 □在子程序入口,为局部变量创建绑定,使被重 复声明的全局变量的绑定无效,然后建立到局 部变量的索引。 □在子程序出口,销毁局部变量的绑定,激活那 些被变无效的非局部变量的绑定
子程序 ◼ 在大多数带子程序的语言中,子程序入口 打开一个新的作用域。 在子程序入口,为局部变量创建绑定,使被重 复声明的全局变量的绑定无效,然后建立到局 部变量的索引。 在子程序出口,销毁局部变量的绑定,激活那 些被变无效的非局部变量的绑定
对象的创建和销毁 ■对象的创建( creation)可能是 口静态创建,包括编译时完成,连接时完成,或者装载时完 成 口动态创建,运行中创建 ■对象的销毁可能在 口运行中完成 口程序终止时完成 ■生存期跨越程序运行期的对象称为永久( persistent 对象
对象的创建和销毁 ◼ 对象的创建(creation)可能是 静态创建,包括编译时完成,连接时完成,或者装载时完 成 动态创建,运行中创建 ◼ 对象的销毁可能在 运行中完成 程序终止时完成 ◼ 生存期跨越程序运行期的对象称为永久(persistent) 对象
静态对象和非静态对象 静态对象:静态创建,程序终止时销毁 非静态对象:程序运行中创建和销毁。 Fortran中的所有变量都是静态对象。 c中的外部变量(用 exteri声明)和局部 static变量是静态对象,自 动变量(用auto声明或默认)是非静态对象。 ■创建和初始化动作完全可能不同时做。例如C++的局部 static变量是 静态创建的,但在执行首次进入变量所在函数时进行初始化。 生存的对象通常有一个固定标识,最常见的就是用对象的存储位 置表示。对象总占据着一块存储空间,在其中保存自己的“值”。 因此,对象创建有时也称为分配( allocation) 存储位置 值
静态对象和非静态对象 ◼ 静态对象:静态创建,程序终止时销毁。 ◼ 非静态对象:程序运行中创建和销毁。 ◼ Fortran 中的所有变量都是静态对象。 ◼ C 中的外部变量(用extern声明)和局部static 变量是静态对象,自 动变量(用auto声明或默认)是非静态对象。 ◼ 创建和初始化动作完全可能不同时做。例如C++ 的局部static 变量是 静态创建的,但在执行首次进入变量所在函数时进行初始化。 生存的对象通常有一个固定标识,最常见的就是用对象的存储位 置表示。对象总占据着一块存储空间,在其中保存自己的“值”。 因此,对象创建有时也称为分配(allocation) 存储位置 值