2013-05-31 4 views
15

При переходе через некоторый исходный код я нашел метод в программе на C, который принимает аргументы типов WORD, DWORD и PWORD. Я знаю, что они переводят на неподписанные числа, но почему их называют WORD?Что такое тип WORD в C?

+1

Я хотел бы добавить, что при разработке для Windows вы можете найти определение типов [в этом документе MSDN] (http://msdn.microsoft.com/en-us/library/windows/desktop /aa383751(v=vs.85).aspx). Обратите внимание, что 'WORD' больше не является фактическим размером машинного слова для последних процессоров, но для совместимости поддерживается 16 бит. – Dirk

+0

@Dirk Я действительно нашел это самостоятельно в исходном коде вскоре после размещения вопроса. Он был в файле заголовка под названием WinDef.h. Содержит все типы typedef для этих типов. Спасибо. – Nealon

ответ

19

Размер слова и типы данных

Слово это количество данных, которое машина может обработать за один раз. Это соответствует аналогии документа, которая включает в себя символы (обычно восемь бит) и страницы (многие слова, часто 4 или 8 КБ), как другие измерения данных. Слово представляет собой целое число байтов, например, один, два, четыре или восемь. Когда кто-то говорит о «n-битах» машины, они обычно говорят о размере слова машины. Например, когда люди говорят, что Pentium представляет собой 32-битный чип, они относятся к его размеру слова, который составляет 32 бита или четыре байта.

Размер регистров общего назначения процессора (GPR) равен размеру его слова. Ширины компонентов в данной архитектуре, например, шина памяти, как правило, не меньше ширины слова. Как правило, по крайней мере в архитектурах, поддерживаемых Linux, адресное пространство памяти равно размеру слова [2]. Следовательно, размер указателя равен размеру слова. Кроме того, размер типа C long равен размеру слова, тогда как размер типа int иногда меньше размера слова. Например, Alpha имеет размер 64-битного слова. Следовательно, регистры, указатели и длинный тип имеют длину 64 бит. Однако тип int составляет 32 бита. Альфа может получать доступ и обрабатывать 64 бита, по одному слову за раз.

Далее читаем: http://www.makelinux.com/books/lkd2/ch19lev1sec2

+1

Кажется, что в сборке слово «слово» обычно составляет 2 байта. И еще одна вещь из моего представления - в GDB, для команды 'x',' w' указывают 4 байта, а 'h' указывают 2 байта. Кажется, это не унифицировано. –

2

WORD в Windows APIs означает 2 байта.

Первоначально он использовался для обозначения размера указателя (как в CPU с длиной слова 16 бит).
Windows API использовали его в typedefs в (и до) Windows 3.1 (который поддерживал только 16-разрядные машины), поэтому значение больше не может измениться.

+0

так же, как long float является более старым термином для удвоений в C++? – Nealon

+0

@Nurgle В C++, чтобы распечатать или выполнить поиск двойника, вы используете «% lf», который обозначает длинные поплавки. Почему это так, если они не связаны? – Nealon

+1

Я думаю, что ваше первое предложение немного вводит в заблуждение. Слово ** ** не определяется как 2 байта, а как ширина шины/регистра. Тип WORD в Windows - 16 бит, поскольку он был первоначально разработан для 16-разрядных машин. – Dirk

2

СЛОВО probalby от некоторых старых кода и, как правило, означало 16bits, в то время как DWORD обычно означает 32bits. Если вы не уверены, вы должны проверить свой код, потому что они должны быть определены где-то.

WORD основывается на машинном слове, размер которого зависит от оборудования.

Смежные вопросы