应用于 Visual Basic 语言中变量的限制有下面各种。
Visual Basic中任何窗体或模块的VBA模块数据段(即在声明部分中定义的数据)有多达 64K 的数据段,该数据段包括下列数据:
如果过程或模块超过 64K 的代码限制,Visual Basic 便产生一个编译时错误。
如果一个过程中定义的局部变量超过 64K,则产生“太多的局部非静态变量”错误。
如果一个模块中定义的模块级变量超过 64K,或定义的自定义类型大于 64K,则产生“固定或静态数据不能超过64K”错误。
如果遇到这类错误,可将一个太大的过程分割成若干较小的过程,或将模块级声明移到另一模块中,来避免这种错误的发生。
作为变量声明的数组不能使用全部数组空间;只有数组描述符对 64K 的限制起作用。例如,在过程中声明或作为模块级声明,Dim x(1000000) As Byte
。然而,如果在记录中声明了一个大的、固定大小的数组,然后将这些记录的示例声明为变量时,就会发生内存溢出。
虽然许多自定义类型的变长字符串的总和可以超过 64K(每个自定义类型的变长字符串仅占 4 个字节;而字符串的实际内容是分别存储的)但自定义类型的变量不能超过 64K。自定义类型可用其它自定义类型来定义,但这种类型的总大小不能超过 64K。
在运行时过程中的参数和局部变量占用堆栈空间。而模块级变量和静态变量不占堆栈空间,因为它们被分配在窗体或模块的数据段中。任何被调用的 DLL 过程,在执行时都要使用堆栈。
Visual Basic 自己也使用堆栈,例如,在计算表达式时保存中间值。
Visual Basic全部可用堆栈的大小是每线程一兆字节(1MB)。然而,如果有相邻的闲置内存,堆栈的大小可以超过这个限定。
详细信息 关于保留堆栈空间的提示,请参阅“性能和兼容性设计”。