Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В следующей таблице показаны типы данных Visual Basic, их вспомогательные типы среды cl language runtime, их номинальное выделение хранилища и их диапазоны значений.
Тип Visual Basic | Структура типа среды CLR | Номинальное выделение хранилища | Диапазон значений |
---|---|---|---|
Boolean | Boolean | Зависит от реализации платформы |
True или False |
Байт | Byte | 1 байт | От 0 до 255 (без знака) |
Char (один символ) | Char | 2 байта | От 0 до 65535 (без знака) |
Дата | DateTime | 8 байт | 0:00:00 (полночь) 1 января 0001 г. до 11:59: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.940656454124654E-324 † для отрицательных значений; 4.940656564584124654E-324–1.79769313486231570E+308 † для положительных значений |
Целое число | 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 до 4294 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 байта в дополнение к данным, содержащимся в типе данных.