数据类型摘要 (Visual Basic)
下表显示了 Visual Basic 的数据类型及其支持的公共语言运行时类型、名义存储分配和取值范围。
Visual Basic 类型 |
公共语言运行时类型结构 |
名义存储分配 |
取值范围 |
---|---|---|---|
取决于实现平台 |
True 或 False |
||
1 个字节 |
0 到 255(无符号) |
||
Char(单个字符) |
2 个字节 |
0 到 65535(无符号) |
|
8 个字节 |
0001 年 1 月 1 日午夜 0:00:00 到 9999 年 12 月 31 日晚上 11:59:59 |
||
16 个字节 |
0 到 +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9...E+28) †,不包含小数点;0 到 +/-7.9228162514264337593543950335,包含小数点右边 28 位 最小非零数为 +/-0.0000000000000000000000000001 (+/-1E-28) † |
||
Double(双精度浮点型) |
8 个字节 |
对于负值,为 -1.79769313486231570E+308 到 -4.94065645841246544E-324 † 对于正值,为 4.94065645841246544E-324 到 1.79769313486231570E+308 † |
|
4 个字节 |
-2,147,483,648 到 2,147,483,647(有符号) |
||
Long (长整型) |
8 个字节 |
(有符号)-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 (9.2...E+18 †) |
|
Object(类) |
4 个字节(32 位平台上) 8 个字节(64 位平台上) |
任何类型都可以存储在 Object 类型的变量中 |
|
1 个字节 |
-128 到 127(有符号) |
||
Short(短整型) |
2 个字节 |
-32,768 到 32,767(有符号) |
|
Single (单精度浮点型) |
4 个字节 |
对于负值,为 -3.4028235E+38 到 -1.401298E-45 † 对于正值,为 1.401298E-45 到 3.4028235E+38 † |
|
String (变长) |
String(类) |
取决于实现平台 |
0 到大约 20 亿个 Unicode 字符 |
4 个字节 |
0 到 4,294,967,295(无符号) |
||
8 个字节 |
0 到 18,446,744,073,709,551,615 (1.8...E+19 †)(无符号) |
||
用户定义的(结构) |
(继承自 ValueType) |
取决于实现平台 |
结构中的每个成员都有由自身数据类型决定的取值范围,与其他成员的取值范围无关 |
2 个字节 |
0 到 65,535(无符号) |
† 在科学记数法中,“E”表示以 10 为底的幂。 因此 3.56E+2 表示 3.56 x 102 或 356,3.56E-2 表示 3.56 / 102 或 0.0356。
备注
对于包含文本的字符串,请使用 StrConv 函数从一种文本格式转换为另一种格式。
使用类型字符,除了声明语句中指定数据类型外,可以强制某些编程元素的数据类型。 请参见 类型字符 (Visual Basic)。
内存消耗
在声明一个基本数据类型时,假定该数据类型的内存消耗等于其名义存储分配是不安全的。 这是因为下面的注意事项:
**存储分配。**公共语言运行时根据执行应用程序的平台的当前特性来分配存储。 如果内存几乎用完,它可能会将声明的元素尽可能紧密地打包到一起。 在其他情况下,它可能会将内存地址与实际硬件边界对齐以优化性能。
**平台宽度。**64 位平台上的存储分配与 32 位平台上的存储分配不同。
复合数据类型
这些注意事项也同样适用于复合数据类型的每个成员,如结构或数组。 不能简单地将类型的各成员的名义存储分配相加。 此外,还有其他一些事项需要注意,如下所示:
**开销。**某些复合类型需要更多内存。 例如,数组需要为其本身和每个维使用额外的内存。 在 32 位平台上,这种开销目前为 12 个字节,外加每维 8 个字节。 在 64 位平台上,此需求增加了一倍。
**存储布局。**不能完全假定成员在内存中的存储顺序与声明的顺序相同。 甚至不能假定字节对齐方式,例如 2 字节或 4 字节边界。 如果要定义类或结构,并需要控制其成员的存储布局,则可以将 StructLayoutAttribute 特性应用于该类或结构。
Object 开销
引用任何基本或复合数据类型的 Object 在除了该数据类型中包含的数据之外还要额外使用 4 个字节。