c++ - ¿Qué tan grande es un DWORD con código de 32 y 64 bits?
winapi 64bit (6)
En Visual C ++, un DWORD es solo un largo sin signo que depende de la máquina, la plataforma y el SDK. Sin embargo, dado que DWORD es una palabra doble (es decir 2 * 16), ¿sigue siendo DWORD de 32 bits en las arquitecturas de 64 bits?
8 bits es un byte. 2 bytes es una palabra. La palabra doble o DWORD tiene 4 bytes o 2 palabras.
:) la palabra en los procesadores modernos es de 32 bits o de 64 bits. Es simplemente la longitud del puntero de la memoria (que es la capacidad de la ALU por turno).
Pero históricamente x86 "palabra" es 16 bits (en lugar de 32). De este modo, las bibliotecas de Microsoft que apuntan históricamente a x86 definen DWORD como unsigned long, es decir, "tamaño del puntero de la máquina".
Eso es todo niños. Para referencia futura ver Wikipedia .
De hecho, en las computadoras de 32 bits, una palabra es de 32 bits, pero el tipo DWORD es un remanente de los viejos tiempos de 16 bits.
Para facilitar el transporte de los programas al nuevo sistema, Microsoft ha decidido que todos los tipos antiguos no cambiarán de tamaño.
Puede encontrar la lista oficial aquí: http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx
Todos los tipos dependientes de la plataforma que cambiaron con la transición de 32 bits a 64 bits terminan con _PTR (DWORD_PTR será de 32 bits en Windows de 32 bits y de 64 bits en Windows de 64 bits).
Llamada larga, dword32, dword64 ... lo que quieras, pero un byte es 8 bits una palabra es 2 bytes una dword (palabra doble) es 2 palabras una qword (palabra quad) es 4 palabras
En sistemas de 32 o 64 bits, los alias como LONG o INT pueden variar, pero un dword sigue siendo una palabra doble
No ... en todas las plataformas Windows DWORD es de 32 bits. LONGLONG o LONG64 se usa para tipos de 64 bits.
Se define como:
typedef unsigned long DWORD;
Sin embargo, de acuerdo con el MSDN:
En plataformas de 32 bits, long es sinónimo de int.
Por lo tanto, DWORD es de 32 bits en un sistema operativo de 32 bits. Hay una definición separada para un DWORD de 64 bits:
typdef unsigned _int64 DWORD64;
Espero que ayude.