Riepilogo dei tipi di dati (Visual Basic)
Nella tabella seguente vengono illustrati i tipi di dati Visual Basic, i tipi di Common Language Runtime, l'allocazione di archiviazione nominale e gli intervalli di valori.
Visual Basic tipo | Struttura dei tipi di Common Language Runtime | Allocazione di archiviazione nominale | Intervallo di valori |
---|---|---|---|
Boolean | Boolean | Dipende dall'implementazione della piattaforma | True o False |
Byte | Byte | 1 byte | Da 0 a 255 (senza segno) |
Char (carattere singolo) | Char | 2 byte | Da 0 a 65535 (senza segno) |
Data | DateTime | 8 byte | 0:00:00 (mezzanotte) il 1° gennaio 0001 alle 11:59:59 il 31 dicembre 9999 |
Decimale | Decimal | 16 byte | da +/a 79,228,162,514,264,337,593,543,950,335 (+/-7.9...E+28) † senza decimali; 0 fino a +/-7.9228162514264337593543950335 con 28 posizioni a destra del decimale; numero diverso da zero più piccolo è +/-0.000000000000000000000000001 (+/-1E-28) † |
Doppia (a virgola mobile a precisione doppia) | Double | 8 byte | -1.79769313486231570E+308 fino a -4.94065645841246544E-324 † per i valori negativi; 4.94065645841246544E-324 a 1.79769313486231570E+308 † per valori positivi |
Integer | Int32 | 4 byte | -2.147.483.648 fino a 2.147.483.647 (firmato) |
Long (intero lungo) | Int64 | 8 byte | -9.223.372.036.854.775.808 fino a 9.223.372.036.854.775.807 (9.2...E+18 †) (firmato) |
Object | Object (classe) | 4 byte sulla piattaforma a 32 bit 8 byte sulla piattaforma a 64 bit |
Qualsiasi tipo può essere archiviato in una variabile di tipo Object |
SByte | SByte | 1 byte | -128 fino a 127 (firmato) |
Breve (intero breve) | Int16 | 2 byte | -32.768 fino a 32.767 (firmato) |
Singolo (a precisione singola a virgola mobile) | Single | 4 byte | -3.4028235E+38 fino a -1.401298E-45 † per i valori negativi; 1.401298E-45 fino a 3.4028235E+38 † per i valori positivi |
Stringa (lunghezza variabile) | String (classe) | Dipende dall'implementazione della piattaforma | Da 0 a circa 2 miliardi di caratteri Unicode |
UInteger | UInt32 | 4 byte | Da 0 a 4.294.967.295 (senza segno) |
Ulong | UInt64 | 8 byte | Da 0 a 18.446.744.073.709.551.615 (1,8...E+19 †) (senza segno) |
Definito dall'utente (struttura) | (eredita da ValueType) | Dipende dall'implementazione della piattaforma | Ogni membro della struttura ha un intervallo determinato dal tipo di dati e indipendentemente dagli intervalli degli altri membri |
Ushort | UInt16 | 2 byte | Da 0 a 65.535 (senza segno) |
† Nella notazione scientifica "E" si riferisce a un potere di 10. Quindi 3.56E+2 indica 3.56 x 102 o 356 e 3.56E-2 indica 3.56 / 102 o 0.0356.
Nota
Per le stringhe contenenti testo, usare la StrConv funzione per convertire da un formato di testo a un altro.
Oltre a specificare un tipo di dati in un'istruzione di dichiarazione, è possibile forzare il tipo di dati di alcuni elementi di programmazione usando un carattere di tipo. Vedere Tipi di caratteri.
Consumo di memoria
Quando si dichiara un tipo di dati elementare, non è sicuro presupporre che il consumo di memoria sia uguale all'allocazione di archiviazione nominale. Ciò è dovuto alle considerazioni seguenti:
Archiviazione assegnazione. Common Language Runtime può assegnare l'archiviazione in base alle caratteristiche correnti della piattaforma in cui è in esecuzione l'applicazione. Se la memoria è quasi piena, potrebbe raggruppare gli elementi dichiarati il più possibile. In altri casi potrebbe allineare gli indirizzi di memoria ai limiti hardware naturali per ottimizzare le prestazioni.
Larghezza piattaforma. Archiviazione'assegnazione in una piattaforma a 64 bit è diversa dall'assegnazione in una piattaforma a 32 bit.
Tipi di dati compositi
Le stesse considerazioni si applicano a ogni membro di un tipo di dati composito, ad esempio una struttura o una matrice. Non è possibile basarsi semplicemente sull'aggiunta delle allocazioni di archiviazione nominale dei membri del tipo. Inoltre, esistono altre considerazioni, ad esempio quanto segue:
In cielo. Alcuni tipi compositi hanno requisiti di memoria aggiuntivi. Ad esempio, una matrice usa memoria aggiuntiva per la matrice stessa e anche per ogni dimensione. In una piattaforma a 32 bit questo sovraccarico è attualmente pari a 12 byte e 8 byte per ogni dimensione. In una piattaforma a 64 bit questo requisito viene raddoppiato.
Archiviazione Layout. Non è possibile presupporre in modo sicuro che l'ordine di archiviazione in memoria sia uguale all'ordine di dichiarazione. Non è nemmeno possibile fare ipotesi sull'allineamento di byte, ad esempio un limite di 2 byte o 4 byte. Se si definisce una classe o una struttura e è necessario controllare il layout di archiviazione dei relativi membri, è possibile applicare l'attributo StructLayoutAttribute alla classe o alla struttura.
Sovraccarico dell'oggetto
Un Object
riferimento a qualsiasi tipo di dati elementare o composito usa 4 byte oltre ai dati contenuti nel tipo di dati.