64-битный Windows API: каков размер C/С++ "DWORD"?

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

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

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

Ответы

Ответ 1

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

Некоторые вещи не являются явно явно указателями, например. РУЧКА, ЛПРАМ, WPARAM. Но эти три изменяют ширину, поскольку они фактически содержат указатели.

Ответ 2

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

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

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

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

Ответ 4

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

Ответ 5

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