日期:2009-11-18  浏览次数:20606 次

一个单项工程可以包含多达 32,000 个"标识符"(非保留字),它们包括(但不限于)窗体、控件、模块、变量、常量、过程、函数和对象。注意,实际的标识符数受可用内存的限制。

Visual Basic 中的变量名不多于 255 个字符,而窗体、控件、模块和类名不多于 40 个字符。Visual Basic 不限制工程中不同对象的实际数目。

控件限制

每个非图形的控件(除形状、直线、图像和标签之外的所有控件)都使用一个窗口。每个窗口都使用系统资源,所以可同时存在的窗口总数受到可用资源的限制。确切的限制取决于可用的系统资源和使用的控件类型。为了减低系统资源的消耗,在创建或显示图形时,可以使用形状、直线、标签和图像控件而不用图片框控件。

1、控件总数

单个窗体允许使用的最大控件数目取决于使用的控件类型和可用的系统资源。然而,有每个窗体只允许 254 个控件名的固定限制。因为数组中的所有控件共享一个控件名,所以控件数组仅对这一限制计数一次。在所有的版本中,对控件数组索引的限制是在 0 到 32,767 的范围之内。如果在每个控件的顶层上再安放控件,例如在框架中嵌套框架控件,VisualBasic 一般只接受不多于 25 层的嵌套控件。

2、对特殊控件的限制

下表列出了用于 Visual Basic 中特殊控件的属性限制。

List和ListCount列表框控件和组合框控件:项数最多为32K,对每项大小的限制为1K(1024 字节);

Text文本框控件:限制为64K;

Caption标签控件:限于1024字节;

命令按钮控件、复选框控件、框架控件和选项按钮控件:限于255个字符,任何超过这些限制的标题均被截尾;

自定义控件属性的标题:限于32K

菜单控件:限于235个字符

Tag所有控件:仅限于可用的内存大小

Name所有控件:限于40个字符

注意,在 Visual Basic 中,控件属性名限于 30 个字符。

代码限制

可被加载到窗体、类或标准模块的代码总数限于 65,534 行。一行代码限于1023 个字节。在一行中的实际文本之前最多只能有 256 个空格的前导,在一个逻辑行中最多只能有 25 个续行符 ( _)。

1、过程、类型和变量

对每个模块的过程数没有限制。每个过程可包含至多 64K 的代码。如果过程或模块超过这一限制,Visual Basic 便产生编译时间错误。如果遇到这种错误,可将特别大的过程分割成若干个较小的过程,或将模块级声明移到另一模块,来避免此类错误发生。Visual Basic 用表来保存代码中的标识符名(变量、过程、常量等)。每个表限于 64K。

2、动态链接库声明表

每个窗体和代码模块使用一个描述动态链接库入口点的结构的表。每个结构约 40 个字节,表的大小限于 64K,形成每个模块大约有 1500 个声明。

3、工程名表

整个应用程序用一张包含所有名称的表。这些名称包括:

·常量名

·变量名

·自定义的类型定义名

·模块名

·DLL 过程声明名

对工程名表总大小没有限制,但是区分大小写的条目不得超过 32K。如果超过了 32K 的限制,可以在不同的模块中重新使用 private 标识符以限制区分大小写的条目数到达 32K。

4、输入表

在不同的模块中每引用一个标识符,便在输入表中创建一个条目。每一个这样的入口最小是 24 字节,但限于 64K,这样每个模块大约可以有 2000个引用。

5、模块条目表

该表中每个模块最多达 125 个字节,但有 64K 的总限制,这样每个工程大约可以产生 400 个模块。

数据限制



应用于 Visual Basic 语言中变量的限制有下面各种。

1、窗体、标准和类模块数据

Visual Basic中任何窗体或模块的VBA模块数据段(即在声明部分中定义的数据)有多达 64K 的数据段,该数据段包括下列数据:

·用 Static 声明的局部变量

·不是数组和变长字符串的模块级变量

·每个模块数组和变长字符串占 4 个字节

2、过程、类型和变量

如果过程或模块超过 64K 的代码限制,Visual Basic 便产生一个编译时错误。

如果一个过程中定义的局部变量超过 64K,则产生“太多的局部非静态变量”错误。

如果一个模块中定义的模块级变量超过 64K,或定义的自定义类型大于64K,则产生“固定或静态数据不能超过64K”错误。

如果遇到这类错误,可将一个太大的过程分割成若干较小的过程,或将模块级声明移到另一模块中,来避免这种错误的发生。

作为变量声明的数组不能使用全部数组空间;只有数组描述符对 64K 的限制起作用。例如,在过程中声明或作为模块级声明,Dim x(1000000) As Byte。然而,如果在记录中声明了一个大的、固定大小的数组,然后将这些记录的示例声明为变量时,就会发生内存溢出。

3、自定义的类型

虽然许多自定义类型的变长字符串的总和可以超过 64K(每个自定义类型的变长字符串仅占 4 个字节;而字符串的实际内容是分别存储的)但自定义类型的变量不能超过 64K。自定义类型可用其它自定义类型来定义,但这种类型的总大小不能超过 64K。

4、堆栈空间

在运行时过程中的参数和局部变量占用堆栈空间。而模块级变量和静态变量不占堆栈空间,因为它们被分配在窗体或模块的数据段中。任何被调用的 DLL 过程,在执行时都要使用堆栈。

Visual Basic 自己也使用堆栈,例如,在计算表达式时保存中间值。

Visual Basic全部可用堆栈的大小是每线程一兆字节(1MB)。然而,如果有相邻的闲置内存,堆栈的大小可以超过这个限定。

系统资源限制

对于 Visual Basic 和用它建立的应用程序的某些限制,是受 Microsoft Windows 的影响。这些限制会因 Microsoft Windows 的版本不同而不同。

每个打开的窗口都要使用系统资源(Microsoft Windows 使用的数据区)。如果超出系统资源范围运行,就会产生运行时错误“Windows运行的可用资源不足”。可以从 Windows NT 3.51 的“程序管理器”或“文件管理器”的“帮助”菜单中选取“关于”,或者从 Windows 95 和 Windows NT 4.0 的“Windows 资源管理器帮助”菜单中选取“关于”,来检测剩余的系统资源的百分比。应用程序也能调用 Windows 的 API GetFreeSystemResources 来回收系统资源、关闭窗口(例如打开的窗体和“代码”窗口,以及在其它应用程序中的窗口)并退出运行的应用程序。