64-битный Windows API: каков размер C / C ++ «DWORD»? - PullRequest
17 голосов
/ 14 февраля 2011

У меня установлена ​​только 32-битная Windows, поэтому я сам не могу это проверить.

Если я правильно понимаю, DWORD, используемый в различных местах в Microsoft API, относится к исходному 16-битному словуи не имеет ничего общего с текущей аппаратной архитектурой?

Так что DWORD, который кажется 32-битным, останется 32-битным, даже когда я в конце концов скомпилирую и свяжу свое приложение для работы в 64-битной Windows?Или DWORD станет шириной 128 бит?

Ответы [ 5 ]

21 голосов
/ 14 февраля 2011

Единственное, что меняет размер между 32 и 64, это указатели.Таким образом, DWORD имеет ширину 32 бита.

Некоторые вещи не являются явно указателями, например HANDLE, LPARAM, WPARAM.Но эти три изменяют ширину, поскольку они на самом деле содержат указатели.

3 голосов
/ 14 февраля 2011

DWORD всегда 32 бита (без знака).QWORD всегда 64 бит (без знака).Тогда есть DWORD32 и DWORD64, которые являются 32 и 64 битами.Не спрашивайте меня, почему они там: -)

http://msdn.microsoft.com/en-us/library/cc230318(v=PROT.10).aspx

http://msdn.microsoft.com/en-us/library/cc230362(v=PROT.10).aspx

и вообще

http://msdn.microsoft.com/en-us/library/cc230309(v=PROT.10).aspx

3 голосов
/ 14 февраля 2011

О Боже, вот еще один разумный вопрос ...:)

Это всегда 32 бита, поскольку в x86 слово "считается" 16 битами. Программы будут ломаться, если размер изменился.

Если вам нужен нативный размер DWORD, попробуйте DWORD_PTR.

( Не спрашивайте в чем разница между DWORD_PTR, ULONG_PTR, UINT_PTR и size_t; Понятия не имею о чем думала Microsoft когда изобрели первые три ...)

0 голосов
/ 08 июля 2011

Я бы даже пошел дальше арки х86. и, в общем, СЛОВО можно считать 16 битами. Иерархия традиционно была BYTE (8 битов), WORD (16 битов), и поэтому DWORD (если D принимается за двойное слово WORD) будет 32 бита. Это не обязательно имеет какое-либо отношение к конкретной платформе или языку, BYTE был 8 битами, а WORD - 16 битами, возвращаясь к старым 8-битным компьютерным дням, даже до x86-арки. существует

0 голосов
/ 14 февраля 2011

На процессорах x86 DWORD составляет 32 бита, даже в 64-битной Windows. Смотрите эту статью в Википедии .

...