Datentyp: Zusammenfassung (Visual Basic)

In der folgenden Tabelle sind die Visual Basic-Datentypen, ihre unterstützenden Common Language Runtime-Typen, ihre nominale Speicherzuordnung und ihre Wertbereiche aufgeführt.

Visual Basic-Typ Common Language Runtime-Typstruktur Nominale Speicherzuteilung Wertebereich
Boolescher Wert Boolean Abhängig von der Implementierung der Plattform True oder False
Byte Byte 1 Byte 0 bis 255 (ohne Vorzeichen)
Char (einzelnes Prozentzeichen) Char 2 Bytes 0 bis 65535 (ohne Vorzeichen)
Date DateTime 8 Byte 0:00:00 (Mitternacht), 1. Januar 0001 bis 23:59:59, 31. Dezember 9999
Decimal Decimal 16 Bytes 0 bis +/–79,228,162,514,264,337,593,543,950,335 (+/–7.9...E+28) ohne Dezimaltrennzeichen; 0 bis +/–7.9228162514264337593543950335 mit 28 Stellen rechts vom Dezimalkomma;

die kleinste Zahl ungleich 0 lautet +/–0.0000000000000000000000000001 (+/–1E-28)
Double (Gleitkomma mit doppelter Genauigkeit) Double 8 Byte -1.79769313486231570E+308 bis -4,94065645841246544E-324 für negative Werte;

4.94065645841246544E-324 bis 1.79769313486231570E+308 für positive Werte
Integer Int32 4 Byte -2.147.483.648 bis 2.147.483.647 (mit Vorzeichen)
Long (Long Integer) Int64 8 Byte -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 (9.2...E+18 ) (mit Vorzeichen)
Object Object (Klasse) 4 Bytes auf einer 32-Bit-Plattform

8 Bytes auf einer 64-Bit-Plattform
In einer Variablen vom Typ Object kann jeder beliebige Typ gespeichert werden
SByte SByte 1 Byte -128 bis 127 (mit Vorzeichen)
Short (Short Integer) Int16 2 Bytes -32,768 bis 32,767 (mit Vorzeichen)
Single (Gleitkomma mit einfacher Genauigkeit) Single 4 Byte -3.4028235E+38 bis -1.401298E-45 für negative Werte;

1.401298E-45 bis 3.4028235E+38 für positive Werte
String (variable Länge) String (Klasse) Abhängig von der Implementierung der Plattform 0 bis ca. 2 Milliarden Unicode-Zeichen
UInteger UInt32 4 Byte 0 bis 4,294,967,295 (ohne Vorzeichen)
ULong UInt64 8 Byte 0 bis 18,446,744,073,709,551,615 (1.8...E+19 ) (ohne Vorzeichen)
Benutzerdefiniert (Struktur) (erbt von ValueType) Abhängig von der Implementierung der Plattform Jeder Member in der Struktur hat einen Wertbereich, der von seinem Datentyp bestimmt wird. Dieser ist unabhängig von den Wertbereichen der anderen Member
UShort UInt16 2 Bytes 0 bis 65,535 (ohne Vorzeichen)

In der wissenschaftlichen Notation bezieht sich „E“ auf eine Potenz von 10. 3,56E+2 bedeutet also 3,56 x 102 oder 356, und 3,56E-2 bedeutet 3,56 / 102 oder 0,0356.

Hinweis

Verwenden Sie für Zeichenfolgen, die Text enthalten, die StrConv-Funktion, um von einem Textformat in ein anderes zu konvertieren.

Zusätzlich zum Angeben eines Datentyps in einer Deklarationsanweisung können Sie den Datentyp einiger Programmierelemente mit einem Typzeichen erzwingen. Siehe Typzeichen.

Speicherverbrauch

Wenn Sie einen elementaren Datentyp deklarieren, kann nicht davon ausgegangen werden, dass der Arbeitsspeicherverbrauch mit der nominalen Speicherbelegung übereinstimmt. Dies ist auf die folgenden Überlegungen zurückzuführen:

  • Speicherzuweisung. Die Common Language Runtime kann Speicher basierend auf den aktuellen Merkmalen der Plattform zuweisen, auf der Ihre Anwendung ausgeführt wird. Wenn der Arbeitsspeicher fast voll ist, kann es sein, dass die deklarierten Elemente so eng wie möglich zusammengepackt werden. In anderen Fällen können die Speicheradressen an natürlichen Hardwaregrenzen ausgerichtet werden, um die Leistung zu optimieren.

  • Plattformbreite. Die Speicherzuweisung auf einer 64-Bit-Plattform unterscheidet sich von der Zuweisung auf einer 32-Bit-Plattform.

Zusammengesetzte Datentypen

Die gleichen Überlegungen gelten für jeden Member eines zusammengesetzten Datentyps, z. B. für eine Struktur oder ein Array. Sie können sich nicht darauf verlassen, die nominalen Speicherbelegungen der Member des Typs einfach zu addieren. Darüber hinaus gibt es weitere Überlegungen, z. B. die folgenden:

  • Mehraufwand. Einige zusammengesetzte Typen haben zusätzliche Arbeitsspeicheranforderungen. Beispielsweise verwendet ein Array zusätzlichen Arbeitsspeicher für das Array selbst und auch für jede Dimension. Auf einer 32-Bit-Plattform beträgt dieser Mehraufwand derzeit 12 Bytes plus 8 Bytes für jede Dimension. Auf einer 64-Bit-Plattform wird diese Anforderung verdoppelt.

  • Speicherlayout. Sie können nicht davon ausgehen, dass die Member im Speicher in derselben Reihenfolge wie in der Deklaration angeordnet sind. Sie können nicht einmal Annahmen über die Byteausrichtung treffen, z. B. eine 2-Byte- oder 4-Byte-Grenze. Wenn Sie eine Klasse oder Struktur definieren und das Speicherlayout ihrer Member steuern müssen, können Sie das StructLayoutAttribute-Attribut auf die Klasse oder Struktur anwenden.

Objektmehraufwand

Ein Object, das auf einen beliebigen elementaren oder zusammengesetzten Datentyp verweist, verwendet zusätzlich zu den im Datentyp enthaltenen Daten 4 Bytes.

Siehe auch