Шрифт:
Размер машинного слова и типы данных
Машинное слово (word) — это количество данных, которые процессор может обработать за одну операцию. Здесь можно применить аналогию документа, состоящего из символов (character, 8 бит) и страниц (много слов). Слово— это некоторое количество битов, как правило 16, 32 или 64. Когда говорят о "n-битовой" машине, то чаще всего имеют в виду размер машинного слова. Например, когда говорят, что процессор Intel Pentium — это 32-разрядный процессор, то обычно имеют в виду размер машинного слова, равный 32 бит, или 4 байт.
Размер процессорных регистров общего назначения равен размеру машинного слова этого процессора. Обычно разрядность остальных компонентов этой же аппаратной платформы в точности равна размеру машинного слова. Кроме того, по крайней мере для аппаратных платформ, которые поддерживаются ОС Linux, размер адресного пространства соответствует размеру машинного слова [92] . Следовательно, размер указателя равен размеру машинного слова. В дополнение к этому, размер типа
92
Размер адресуемой памяти может быть меньше максимального значения машинного слова. Например, для 64-разрядных аппаратных платформ размер указателя ранен 64 бит, однако только 48 бит можно использовать для адресации. В дополнение к этому, общее количество физической памяти может быть больше максимального значения машинного слова, как, например, это имеет место при наличии расширения Intel PAE..
Для некоторых операционных систем и процессоров стандартную порцию данных не называют машинным словом. Вместо этого, словом называется некоторая фиксированная порция данных, название которой выбрано случайным образом или имеет исторические корни. Например, в некоторых системах данные могут разбиваться на байты (byte — 8 бит), слова (word — 16 бит), двойные слова (double word — 32 бит) и четверные слова (quad word — 64 бит), несмотря на то что на самом деле система является 32-разрядной. В этой книге и вообще в контексте операционной системы Linux под машинным словом понимают стандартную порцию данных процессора, как обсуждалось ранее.
Для каждой аппаратной платформы, поддерживаемой операционной системой Linux, в файле
Таблица 19.1. Поддерживаемые аппаратные платформы
Аппаратная платформа | Описание | Размер машинного слова |
---|---|---|
alpha | Digital Alpha | 64 бит |
arm | ARM и StrongARM | 32 бит |
cris | CRIS | 32 бит |
h8300 | H8/300 | 32 бит |
I386 | Intel x86 | 32 бит |
ia64 | IA-64 | 64 бит |
m68k | Motorola 68k | 32 бит |
m86knommu | m68k без устройства MMU | 32 бит |
mips | MIPS | 32 бит |
mips64 | 64-разрядная MIPS | 64 бит |
parisc | HP PA-RISC | 32 бит, или 64 бит |
ppc | PowerPC | 32 бит |
ppc64 | POWER | 64 бит |
s390 | IBM S/390 | 32 бит, или 64 бит |
sh | Hitachi SH | 32 бит |
sparс | SPARC | 32 бит |
sparc64 | UltraSPARC | 64 бит |
um | Usermode Linux | 32 бит, или 64 бит |
v850 | v850 | 32 бит |
x86_64 | X86-64 | 64 бит |
Стандарт языка С явно указывает, что размер памяти, которую занимают переменные стандартных типов данных, зависит от аппаратной реализации [93] , при этом также определяется минимально возможный размер типа. Неопределенность размеров стандартных типов языка С для различных аппаратных платформ имеет свои положительные и отрицательные стороны. К плюсам можно отнести то, что для стандартных типов языка С можно пользоваться преимуществами, связанными с размером машинного слова, а также отсутствие необходимости явного указания размера. Для ОС Linux размер типа
93
За исключением размера типа
94
На самом деле, для 64-разрядных аппаратных платформ, которые поддерживаются ОС Linux, размеры типов
Ситуация еще более запутывается тем, что одни и те же типы данных в пространстве пользователя и в пространстве ядра не обязательно должны соответствовать друг другу. Аппаратная платформа sparc64 предоставляет 32-разрядное пространство пользователя, а поэтому указатели, типы
Всегда необходимо помнить о следующем.
• Как и требует стандарт языка С, размер типа
• Нет никакой гарантии, что размер типа
• То же касается и типа
• Никогда нельзя надеяться, что тип
• Так как размер типа
• Точно так же нельзя предполагать, что размер типа
Скрытые типы данных
Скрытые (opaque) типы данных — это те типы, для которых не раскрывается их внутренняя структура, или формат. Они похожи на черный ящик, насколько это можно реализовать в языке программирования С. В этом языке программирования нет какой-либо особенной поддержки для этих типов. Вместо этого, разработчики определяют новый тип данных через оператор