变量,对象和数组的可见性和生命周期
变量,对象或数组的存储类确定内存赋值的时间和位置以及内存何时被销毁。FreeBASIC有两个存储类:
automatic 和
static .
自动
Automatic 变量,对象和数组生命周期从声明点开始,并在结束时离开它们声明的范围。
Automatic 实体将保证为声明它们的块的每个实例提供唯一的存储。例如,在过程中声明的
automatic 变量将被赋值在不同的地址,并且对于每次调用过程都具有唯一的状态(值)。
Automatic 使用
Dim,
ReDim和
Var关键字定义变量,对象和数组,而不使用
Shared说明符。
变量,对象和数组的内存赋值在程序堆栈上。
Automatic 变量,对象和数组没有链接。
静态的
Static 变量,对象和数组的生命周期从程序创建开始,并以程序终止结束。
Static 实体被保证具有与声明它们的块的每个实例相同的存储。例如,在一个过程中声明的
static 变量将被赋值在同一个地址上,并且在对该过程的每个调用中保留其状态(值)。
Static 使用
Static关键字声明变量,对象和数组。使用
Shared说明符声明的实体是隐式
static .在使用
Static说明符声明的过程中声明的所有实体也隐式
static .
static 变量,对象和数组的内存在可执行文件的
.BSS部分或
.DATA部分中赋值,如果它们在定义时被初始化。
Static 可变长度数组必须声明为空,具有空的下标范围列表;它们的元素数据仍然被赋值在可用存储中(当它们被调整大小时),但是内部数组数据被赋值在可执行文件的
.DATA部分中,以允许元素数据在整个程序执行期间持续存在。
Static 变量,对象和数组默认内部链接,除非以前声明使用
Extern或
Common关键字。
平台差异
- 在DOS和Windows平台中,可以使用-t 命令行开关在编译时调整程序堆栈的大小。在Linux平台中,可以通过修改/etc/security/limits.conf或使用shell内建ulimit在每个线程的基础上,在加载时调整程序堆栈的大小。
与QB差别
- QuickBASIC允许static 实体在过程和DEF FN例程中声明。
参考