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 precisione puntatore e tipi di precisione del puntatore specifici. Questi tipi sono stati aggiunti all'ambiente di sviluppo per consentire agli sviluppatori di preparare Windows a 64 bit. Questi tipi sono derivati dall'intero del linguaggio C di base e dai tipi long. È quindi possibile usare questi tipi di dati nel codice compilato e testato in Windows a 32 bit e quindi ricompilare il compilatore a 64 bit quando si punta a 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 l'utilizzo di puntatori potenzialmente non sicuri, polimorfismo e definizioni di dati. Ad esempio, quando una variabile è di tipo ULONG_PTR, è chiaro che verrà usata per i puntatori di cast per operazioni aritmetiche o polimorfismo. Non è possibile indicare direttamente tale utilizzo usando i tipi di dati meno recenti. È possibile eseguire questa operazione indirettamente usando la denominazione del tipo derivato 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 sono la stessa lunghezza in Windows a 32 e a 64 bit. Per ricordarlo, la precisione fa parte del nome del tipo di dati. Di seguito sono riportati i tipi di dati di 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 con segno a 32 bit |
LONG64 |
Intero con segno a 64 bit |
UINT32 |
Senza segno INT32 |
UINT64 |
Senza segno INT64 |
ULONG32 |
Unsigned LONG32 |
ULONG64 |
Senza segno LONG64 |
Precisione puntatore
Man mano che la precisione del puntatore cambia , ovvero diventa 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, è sicuro eseguire il cast di un puntatore a uno di questi tipi durante l'esecuzione di aritmetica puntatore; se la precisione del puntatore è 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 e conteggio puntatore.
Termine | Descrizione |
---|---|
DWORD_PTR |
Tipo lungo senza segno per la precisione del puntatore. |
HALF_PTR |
Metà delle dimensioni di un puntatore. Usare all'interno di una struttura contenente un puntatore e due campi di piccole dimensioni. |
INT_PTR |
Tipo integer firmato per la precisione del puntatore. |
LONG_PTR |
Tipo lungo firmato per precisione puntatore. |
SIZE_T |
Numero massimo di byte a cui può fare riferimento un puntatore. Usare per un conteggio che deve estendere l'intervallo completo di un puntatore. |
SSIZE_T |
SIZE_T firmato. |
UHALF_PTR |
HALF_PTR senza segno. |
UINT_PTR |
INT_PTR senza segno. |
ULONG_PTR |
LONG_PTR senza segno. |
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 64 bit in 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, questo è un puntatore a 64 bit troncato. |
POINTER_64 |
Puntatore a 64 bit. In Windows a 64 bit questo è un puntatore nativo. In Windows a 32 bit si tratta di un puntatore a 32 bit esteso per l'accesso. Si noti che non è sicuro presupporre lo stato del bit del puntatore elevato. |