Skip to content

存储类 (Storage Classes)


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

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

自动 (Automatic)

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

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

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

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

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

静态 (Static)

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

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

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

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

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

平台差异

  • 在 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 是开源项目,与微软公司无隶属关系