Riepilogo dei tipi di dati (Visual Basic)
Aggiornamento: novembre 2007
Nella tabella riportata di seguito vengono illustrati i tipi di dati Visual Basic, i relativi tipi di supporto in Common Language Runtime, la relativa allocazione di memoria nominale e gli intervalli di valori corrispondenti.
Tipo Visual Basic |
Struttura dei tipi in Common Language Runtime |
Allocazione di memoria nominale |
Intervallo di valori |
---|---|---|---|
Dipende dalla piattaforma di implementazione |
True o False |
||
1 byte |
Da 0 a 255 (senza segno) |
||
Char (carattere singolo) |
2 byte |
Da 0 a 65535 (senza segno) |
|
8 byte |
Dalle 0.00.00 (mezzanotte) dell'1 gennaio 0001 alle 23.59.59 del 31 dicembre 9999 |
||
16 byte |
Da 0 a +/-79.228.162.514.264.337.593.543.950.335 (+/-7,9...E+28) † senza decimali; da 0 a +/-7,9228162514264337593543950335 con 28 posizioni decimali; il numero più piccolo diverso da zero è +/-0,0000000000000000000000000001 (+/-1E-28) † |
||
Double (virgola mobile a precisione doppia) |
8 byte |
Da -1,79769313486231570E+308 a -4,94065645841246544E-324 † per i valori negativi; Da 4,94065645841246544E-324 a 1,79769313486231570E+308 † per i valori positivi |
|
4 byte |
Da -2.147.483.648 a 2.147.483.647 (con segno) |
||
Long (valore long integer) |
8 byte |
Da -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 (9,2...E+18 †) (con segno) |
|
Object (classe) |
4 byte su piattaforma a 32 bit 8 byte su piattaforma a 64 bit |
In una variabile di tipo Object è possibile memorizzare qualsiasi tipo |
|
1 byte |
Da -128 a 127 (con segno) |
||
Short (valore short integer) |
2 byte |
Da -32.768 a 32.767 (con segno) |
|
Single (virgola mobile a precisione singola) |
4 byte |
Da -3,4028235E+38 a -1,401298E-45 † per i valori negativi; Da 1,401298E-45 a 3,4028235E+38 † per i valori positivi |
|
String (lunghezza variabile) |
String (classe) |
Dipende dalla piattaforma di implementazione |
Da 0 a circa 2 miliardi di caratteri Unicode |
4 byte |
Da 0 a 4.294.967.295 (senza segno) |
||
8 byte |
Da 0 a 18.446.744.073.709.551.615 (1,8...E+19 †) (senza segno) |
||
Tipo di dati definito dall'utente (struttura) |
(eredita da ValueType) |
Dipende dalla piattaforma di implementazione |
Ciascun membro della struttura presenta un intervallo determinato dal relativo tipo di dati e indipendente dagli intervalli degli altri membri |
2 byte |
Da 0 a 65.535 (senza segno) |
† Nella notazione scientifica la lettera "E" si riferisce a un potenza di 10. Pertanto 3,56E+2 indica 3.56 x 102 o 356, mentre 3,56E-2 indica 3.56 / 102 o 0,0356.
Nota: |
---|
Per le stringhe contenenti testo utilizzare la funzione StrConv per eseguire la conversione da un formato di testo a un altro. |
Consumo di memoria
Quando si dichiara un tipo di dati elementare, supporre che il relativo consumo di memoria corrisponda all'allocazione di memoria nominale presenta alcuni rischi. È opportuno considerare i seguenti aspetti:
Assegnazione di memoria. Utilizzando Common Language Runtime è possibile assegnare memoria in base alle caratteristiche correnti della piattaforma su cui viene eseguita l'applicazione. Se la memoria è quasi piena, è possibile comprimere il più possibile gli elementi dichiarati. In altri casi, è possibile allineare i relativi indirizzi di memoria ai limiti dell'hardware al fine di ottimizzare le prestazioni.
Ampiezza della piattaforma. L'assegnazione di memoria varia a seconda che venga eseguita su una piattaforma a 64 o a 32 bit.
Tipi di dati compositi
Le stesse considerazioni si applicano a ciascun membro di un tipo di dati composito, ad esempio una struttura o una matrice. Non è sufficiente sommare le allocazioni di memoria nominali dei membri del tipo. È necessario inoltre considerare altri aspetti, come quelli illustrati di seguito:
Overhead. Alcuni tipi compositi sono caratterizzati da requisiti di memoria aggiuntivi. Per una matrice, ad esempio, viene utilizzata memoria aggiuntiva sia per la matrice stessa che per ciascuna dimensione. Su una piattaforma a 32 bit tale overhead corrisponde attualmente a 12 byte più 8 byte per ciascuna dimensione. Su una piattaforma a 64 bit tale requisito risulta raddoppiato.
Layout di memoria. Non è possibile presupporre con certezza che l'ordine di archiviazione in memoria corrisponda all'ordine di dichiarazione, né tantomeno ipotizzare l'allineamento dei byte, ad esempio in base a un limite di 2 o 4 byte. Quando si definisce una classe o una struttura ed è necessario controllare il layout di memoria dei relativi membri, è possibile applicare l'attributo StructLayoutAttribute alla classe o alla struttura.
Overhead di Object
Un tipo di dati Object che fa riferimento a un tipo elementare o composito utilizza 4 byte in aggiunta ai dati contenuti nel tipo di dati.
Vedere anche
Concetti
Utilizzo efficiente dei tipi di dati