Os novos tipos de dados
Três classes de tipos de dados foram introduzidas para o Windows de 64 bits: tipos de dados de precisão fixa, tipos de precisão de ponteiro e tipos de precisão de ponteiro específico. Esses tipos foram adicionados ao ambiente de desenvolvimento para permitir que os desenvolvedores se preparem para o Windows de 64 bits. Esses tipos são derivados dos tipos básicos de inteiros e longos da linguagem C. Portanto, você pode usar esses tipos de dados no código que você compila e testa no Windows de 32 bits e, em seguida, recompilar com o compilador de 64 bits ao direcionar o Windows de 64 bits.
Mesmo para aplicativos destinados apenas ao Windows de 32 bits, a adoção desses novos tipos de dados torna seu código mais robusto. Para usar esses tipos de dados, você deve verificar seu código em busca de uso de ponteiro potencialmente inseguro, polimorfismo e definições de dados. Por exemplo, quando uma variável é do tipo ULONG_PTR, é claro que ela será usada para lançar ponteiros para operações aritméticas ou polimorfismo. Não é possível indicar esse uso diretamente usando os tipos de dados mais antigos. (Você pode fazer isso indiretamente usando nomenclatura de tipo derivada ou notação húngara, mas ambas as técnicas são propensas a erros.)
Todos esses tipos de dados são declarados em BaseTsd.h. Para obter mais informações, incluindo definições desses tipos de dados, consulte Tipos de dados do Windows.
Precisão Fixa
Os tipos de dados de precisão fixa têm o mesmo comprimento no Windows de 32 e 64 bits. Para ajudá-lo a se lembrar disso, sua precisão faz parte do nome do tipo de dados. A seguir estão os tipos de dados de precisão fixa.
Vigência | Descrição |
---|---|
DWORD32 |
Inteiro não assinado de 32 bits |
DWORD64 |
Inteiro não assinado de 64 bits |
INT32 |
Inteiro assinado de 32 bits |
INT64 |
Inteiro assinado de 64 bits |
LONG32 |
Inteiro assinado de 32 bits |
LONG64 |
Inteiro assinado de 64 bits |
UINT32 |
Não assinado INT32 |
UINT64 |
Não assinado INT64 |
ULONG32 |
Não assinado LONG32 |
ULONG64 |
Não assinado LONG64 |
Precisão do ponteiro
À medida que a precisão do ponteiro muda (ou seja, quando se torna 32 bits no Windows de 32 bits e 64 bits no Windows de 64 bits), os tipos de dados que lidam com a precisão do ponteiro ajustam-se à nova precisão correspondente. Portanto, é seguro lançar um ponteiro para um desses tipos ao fazer operações aritméticas com ponteiros; se a precisão do ponteiro for de 64 bits, então o tipo será de 64 bits. Os tipos de contagem também refletem o tamanho máximo ao qual um ponteiro pode se referir. A seguir estão os tipos de precisão de ponteiro e contagem.
Prazo | Descrição |
---|---|
DWORD_PTR |
Tipo longo não assinado para precisão do ponteiro. |
HALF_PTR |
Metade do tamanho de um cursor de computador. Use dentro de uma estrutura que contém um ponteiro e dois campos pequenos. |
INT_PTR |
Tipo de inteiro assinado para precisão do ponteiro. |
LONG_PTR |
Tipo longo assinado para precisão do ponteiro. |
SIZE_T |
O número máximo de bytes aos quais um ponteiro pode se referir. Use para uma contagem que deve abranger todo o intervalo de um ponteiro. |
SSIZE_T |
Assinado SIZE_T. |
UHALF_PTR |
Não assinado HALF_PTR |
UINT_PTR |
Não assinado INT_PTR. |
ULONG_PTR |
Não assinado LONG_PTR. |
Tipos de Pointer-Precision específicos
Os novos tipos de ponteiro a seguir dimensionam explicitamente o ponteiro. Tenha cuidado ao usar ponteiros em código de 64 bits: Se você declarar o ponteiro usando um tipo de 32 bits, o sistema operacional criará o ponteiro truncando um ponteiro de 64 bits. (Todos os ponteiros são de 64 bits no Windows de 64 bits.)
Vigência | Descrição |
---|---|
POINTER_32 |
Um ponteiro de 32 bits. No Windows de 32 bits, este é um ponteiro nativo. No Windows de 64 bits, este é um ponteiro truncado de 64 bits. |
POINTER_64 |
Um ponteiro de 64 bits. No Windows de 64 bits, este é um ponteiro nativo. No Windows de 32 bits, este é um ponteiro de 32 bits com extensão de sinal. Observe que não é seguro assumir o estado do bit de ponteiro alto. |