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. существовал