Condividi tramite


Nuovi tipi di dati

Sono state introdotte tre classi di tipi di dati per Windows a 64 bit: tipi di dati a precisione fissa, tipi di dati con precisione di puntatore e tipi di dati con precisione specifica di puntatore. Questi tipi sono stati aggiunti all'ambiente di sviluppo per consentire agli sviluppatori di prepararsi per Windows a 64 bit. Questi tipi sono derivati dai tipi integer del linguaggio C di base e long. È quindi possibile usare questi tipi di dati nel codice compilato e testato in Windows a 32 bit e quindi ricompilare con il compilatore a 64 bit quando si usa Windows a 64 bit.

Anche per le applicazioni destinate solo a Windows a 32 bit, l'adozione di questi nuovi tipi di dati rende il codice più affidabile. Per usare questi tipi di dati, è necessario analizzare il codice per individuare l'utilizzo di puntatori potenzialmente non sicuri, il polimorfismo e le definizioni di dati. Ad esempio, quando una variabile è di tipo ULONG_PTR, è chiaro che verrà usata per il casting dei puntatori per operazioni aritmetiche o polimorfismo. Non è possibile indicare tale utilizzo direttamente usando i tipi di dati meno recenti. È possibile eseguire questa operazione indirettamente usando la denominazione dei tipi derivati o la notazione ungherese, ma entrambe le tecniche sono soggette a errori.

Tutti questi tipi di dati vengono dichiarati in BaseTsd.h. Per altre informazioni, incluse le definizioni di questi tipi di dati, vedere tipi di dati di Windows.

Precisione fissa

I tipi di dati a precisione fissa hanno la stessa lunghezza in Windows a 32 e a 64 bit. Per ricordare questo aspetto, la precisione fa parte del nome del tipo di dati. Di seguito sono riportati i tipi di dati a precisione fissa.

Termine Descrizione
DWORD32
Intero senza segno a 32 bit
DWORD64
Intero senza segno a 64 bit
INT32
Intero con segno a 32 bit
INT64
Intero con segno a 64 bit
LONG32
Intero segnato a 32 bit
LONG64
Intero con segno a 64 bit
UINT32
Unsigned INT32
UINT64
INT64 unsigned
ULONG32
Unsigned LONG32
ULONG64
Senza segno LONG64

Precisione puntatore

Man mano che la precisione del puntatore cambia (ovvero diventa a 32 bit in Windows a 32 bit e 64 bit con Windows a 64 bit), i tipi di dati di precisione del puntatore riflettono di conseguenza la precisione. Pertanto, è possibile eseguire il cast di un puntatore a uno di questi tipi quando si esegue l'aritmetica del puntatore; se la precisione del puntatore è di 64 bit, il tipo è a 64 bit. I tipi di conteggio riflettono anche le dimensioni massime a cui può fare riferimento un puntatore. Di seguito sono riportati i tipi di precisione del puntatore e di conteggio.

Termine Descrizione
DWORD_PTR
Tipo long senza segno per la precisione del puntatore.
HALF_PTR
Metà delle dimensioni di un puntatore. Utilizzare all'interno di una struttura che contiene un puntatore e due campi piccoli.
INT_PTR
Tipo intero con segno per la precisione dei puntatori.
LONG_PTR
Tipo intero lungo con segno per la precisione del puntatore.
SIZE_T
Numero massimo di byte a cui può fare riferimento un puntatore. Usare per un conteggio che deve coprire l'intero intervallo di un puntatore.
SSIZE_T
Firma SIZE_T.
UHALF_PTR
Unsigned HALF_PTR.
UINT_PTR
Unsigned INT_PTR.
ULONG_PTR
Unsigned LONG_PTR.

Tipi di Pointer-Precision specifici

I nuovi tipi di puntatore seguenti ridimensionano in modo esplicito il puntatore. Prestare attenzione quando si usano puntatori nel codice a 64 bit: se si dichiara il puntatore usando un tipo a 32 bit, il sistema operativo crea il puntatore troncando un puntatore a 64 bit. Tutti i puntatori sono a 64 bit in un ambiente Windows a 64 bit.

Termine Descrizione
POINTER_32
Puntatore a 32 bit. In Windows a 32 bit si tratta di un puntatore nativo. In Windows a 64 bit si tratta di un puntatore a 64 bit troncato.
POINTER_64
Puntatore a 64 bit. In Windows a 64 bit si tratta di un puntatore nativo. Su Windows a 32 bit, questo è un puntatore a 32 bit con segno esteso.
Si noti che non è sicuro presupporre lo stato del bit del puntatore alto.