Сводка типов данных (Visual Basic)
В следующей таблице показаны Visual Basic типы данных, их вспомогательные типы среды CLR, их номинальное выделение хранилища и диапазоны значений.
тип Visual Basic | Структура типов среды CLR | Номинальное выделение хранилища | Диапазон значений |
---|---|---|---|
Boolean | Boolean | Зависит от реализации платформы | True или False |
Byte | Byte | 1 байт | От 0 до 255 (без знака) |
Char (один символ) | Char | 2 байта | От 0 до 65535 (без знака) |
Дата | DateTime | 8 байт | 0:00:00 (полночь) 1 января 0001 по 11:59:59 вечера 31 декабря 9999 г. |
Десятичное число | Decimal | 16 байт | От 0 до +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9...E+28) † без десятичной запятой; От 0 до +/-7.9228162514264337593543950335 с 28 местами справа от десятичного числа; наименьшее ненулевое число — +/-0,000000000000000000000001 (+/-1E-28) † |
Double (двойной точности с плавающей запятой) | Double | 8 байт | -1.79769313486231570E+308–-4.94065645841246544E-324 † для отрицательных значений; 4.9406564541246544E-324–1.79769313486231570E+308 † для положительных значений |
Integer | Int32 | 4 байта | -2,147,483,648–2,147,483,647 (подписан) |
Long (длинное целое число) | Int64 | 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 |
SByte | SByte | 1 байт | –128–127 (подписан) |
Short (короткое целое число) | Int16 | 2 байта | От -32 768 до 32 767 (подписан) |
Single (одноточие с плавающей запятой) | Single | 4 байта | -3.4028235E+38–-1.401298E-45 † для отрицательных значений; 1.401298E-45–3.4028235E+38 † для положительных значений |
Строка (переменная длина) | String (класс) | Зависит от реализации платформы | От 0 до приблизительно 2 миллиардов символов Юникода |
UInteger | UInt32 | 4 байта | От 0 до 4 294 967 295 (без знака) |
ULong | UInt64 | 8 байт | От 0 до 18 446 744 073 709 551 615 (1,8...E+19 †) (без знака) |
Определяемые пользователем (структура) | (наследует от ValueType) | Зависит от реализации платформы | Каждый член структуры имеет диапазон, определенный его типом данных, и не зависит от диапазонов других элементов. |
UShort | UInt16 | 2 байта | От 0 до 65 535 (без знака) |
† В научной нотации "E" относится к силе 10. Поэтому 3.56E+2 означает 3.56 x 102 или 356, а 3.56E-2 означает 3.56 / 102 или 0,0356.
Примечание
Для строк, содержащих текст, используйте StrConv функцию для преобразования из одного текстового формата в другой.
Помимо указания типа данных в операторе объявления, можно принудительно задать тип данных некоторых программных элементов с помощью символа типа. См. символы типов.
Затраты памяти
При объявлении элементарной типы данных небезопасно предположить, что потребление памяти совпадает с его номинальным выделением хранилища. Это связано со следующими соображениями:
служба хранилища назначение. Среда CLR может назначать хранилище на основе текущих характеристик платформы, на которой выполняется приложение. Если память почти заполнена, она может упаковать объявленные элементы как можно ближе друг к другу. В других случаях он может выровнять адреса памяти с естественными границами оборудования для оптимизации производительности.
Ширина платформы. служба хранилища назначение на 64-разрядной платформе отличается от назначения на 32-разрядной платформе.
Составные типы данных
Те же рекомендации применяются к каждому элементу составного типа данных, например структуре или массиву. Нельзя полагаться на простое добавление номинального распределения хранилища членов типа. Кроме того, существуют и другие аспекты, такие как:
Накладные расходы. Некоторые составные типы имеют дополнительные требования к памяти. Например, массив использует дополнительную память для самого массива, а также для каждого измерения. На 32-разрядной платформе эта нагрузка в настоящее время составляет 12 байт плюс 8 байт для каждого измерения. На 64-разрядной платформе это требование удвоится.
служба хранилища макет. Вы не можете безопасно предположить, что порядок хранения в памяти совпадает с порядком объявления. Вы даже не можете делать предположения о выравнивании байтов, таких как 2-байтовая или 4-байтовая граница. Если вы определяете класс или структуру и хотите управлять макетом хранилища его элементов, можно применить StructLayoutAttribute атрибут к классу или структуре.
Затраты на объекты
Ссылка Object
на любой простой или составной тип данных использует 4 байта в дополнение к данным, содержащимся в типе данных.