windows winapi visual-c++ 32bit-64bit win64

API de Windows de 64 bits: ¿cuál es el tamaño de un C/C++ “DWORD”?



winapi visual-c++ (5)

Solo tengo instalado Windows de 32 bits, por lo que no puedo verificarlo por mí mismo.

Si comprendo correctamente, el DWORD utilizado en varios lugares de la API de Microsoft hace referencia a la palabra original de 16 bits, y no tiene nada que ver con la arquitectura de hardware actual.

Entonces, ¿DWORD, que parece ser de 32 bits, seguirá siendo de 32 bits incluso cuando finalmente compile y vinculo mi aplicación para ejecutar en Windows de 64 bits? ¿O DWORD tendrá un ancho de 128 bits?



En los procesadores x86, un DWORD es de 32 bits, incluso en Windows de 64 bits. Vea este artículo de Wikipedia .


Incluso iría más allá del arco x86. y digamos que, en general, una PALABRA puede considerarse de 16 bits. La jerarquía tradicionalmente ha sido BYTE (8 bits), PALABRA (16 BITS) y, por lo tanto, un DWORD (si se considera que D es una PALABRA de doble ancho) sería de 32 bits. Esto no necesariamente tiene que ver con una plataforma o idioma en particular, un BYTE ha sido de 8 bits y una PALABRA ha sido de 16 bits que se remonta a los viejos tiempos de computadora de 8 bits, incluso antes del arco x86. existió


Lo único que cambia de tamaño entre 32 y 64 son los punteros. Así DWORD se mantiene 32 bits de ancho.

Algunas cosas no son inmediatamente punteros, por ejemplo, HANDLE, LPARAM, WPARAM. Pero estos tres cambian de ancho, ya que en realidad tienen punteros.


Oh Dios, aquí viene otra pregunta razonable ... :)

Siempre son 32 bits, ya que una "palabra" se considera que es de 16 bits en x86. Los programas se romperían si cambiara el tamaño.

Si necesita un DWORD tamaño nativo, intente DWORD_PTR .

( No preguntes cuál es la diferencia entre DWORD_PTR , ULONG_PTR , UINT_PTR y size_t ; no tengo idea de lo que Microsoft estaba pensando cuando inventó los primeros tres ...)