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. |