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

Boolean

Boolean

Dipende dalla piattaforma di implementazione

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)

Date

DateTime

8 byte

Dalle 0.00.00 (mezzanotte) dell'1 gennaio 0001 alle 23.59.59 del 31 dicembre 9999

Decimal

Decimal

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)

Double

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

Integer

Int32

4 byte

Da -2.147.483.648 a 2.147.483.647 (con segno)

Long (valore long integer)

Int64

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

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

SByte

SByte

1 byte

Da -128 a 127 (con segno)

Short (valore short integer)

Int16

2 byte

Da -32.768 a 32.767 (con segno)

Single (virgola mobile a precisione singola)

Single

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

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)

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

UShort

UInt16

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

Caratteri tipo

Utilizzo efficiente dei tipi di dati

Riferimenti

Funzioni di conversione del tipo

Riepilogo della conversione

Funzione StrConv

StructLayoutAttribute