64-разрядный Windows API: каков размер C / C++ "DWORD"?

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

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

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

5 ответов


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

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


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

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

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

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


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

и в генерал!--1-->

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


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


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