Skip to content

存储类 (Storage Classes) ​


变量、对象和数组的可见性与生命周期

变量、对象或数组的存储类决定了何时何处为其分配内存,以及何时销毁该内存。FreeBASIC 中有两种存储类:自动(automatic) 和 静态(static)。

自动 (Automatic) ​

自动 变量、对象和数组的生命周期从声明点开始,在离开其所在作用域时结束。

自动 实体保证对于其声明所在代码块的每个实例都有唯一的存储。例如,在过程中声明的 自动 变量将在每次调用该过程时分配在不同的地址,并具有唯一的状态(值)。

自动 变量、对象和数组使用不带 Shared 限定符的 Dim、Redim 和 Var 关键字定义。

自动 变量、对象和数组的内存在程序栈上分配。

自动 变量、对象和数组没有链接性。

静态 (Static) ​

静态 变量、对象和数组的生命周期从程序创建开始,到程序终止时结束。

静态 实体保证对于其声明所在代码块的每个实例都有相同的存储。例如,在过程中声明的 静态 变量将在相同的地址分配,并在每次调用该过程时保留其状态(值)。

静态 变量、对象和数组使用 Static 关键字声明。使用 Shared 限定符声明的实体隐式为 静态。在使用 Static 限定符声明的过程中声明的所有实体也隐式为 静态。

静态 变量、对象和数组的内存在可执行文件的 .BSS 段中分配,如果在定义时初始化则在 .DATA 段中分配。静态 可变长数组必须以空下标范围列表声明为空;它们的元素数据仍在自由存储区中分配(调整大小时),但内部数组数据在可执行文件的 .DATA 段中分配,以便元素数据在整个程序执行期间持续存在。

静态 变量、对象和数组默认具有内部链接性,除非之前使用 Extern 或 Common 关键字声明过。

平台差异 ​

  • 在 DOS 和 Windows 平台上,可以在编译时使用 -t 命令行开关 调整程序栈大小。在 Linux 平台上,可以通过修改 /etc/security/limits.conf 在加载时调整程序栈大小,或使用 shell 内置命令 ulimit 按线程调整。

与 QB 的差异 ​

  • QuickBASIC 只允许在过程和 DEF FN 例程中声明 静态 实体。

参见 ​

  • Extern, Common
  • Dim, Redim, Var, Shared, Byref (variables)
  • Static
  • 链接性

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系