2011-01-05 3 views
3

Почему наименьшее значение может быть сохранено в байте (8 бит) & не бит (1 бит) в памяти? Даже булевы хранятся в байтах. Будем ли мы когда-либо ударять наименьшее число до 32 или 64 бит, например, в регистре на CPU?Почему наименьшее значение, которое можно сохранить, это байт (8 бит), а не бит (1 бит)?

+2

Пока вы не можете сохранить один бит, вы можете использовать оптимизацию компилятора для объединения нескольких бит/булевых в пространство общей памяти. Это обычно используется для битовых флагов или перечислений. Вы все равно не будете хранить один бит, но вы можете избежать хранения 8 байтов для 8 логических значений. –

ответ

1

Основные методы доступа к процессору ограничены размером самого маленького используемого регистра. На большинстве архитектур этот размер составляет 8 бит. Вы можете использовать их меньшую часть; например, C имеет функцию битового поля в структурах, которая позволит объединять поля, которые должны быть только определенной длиной бит. Доступ по-прежнему требует, чтобы весь байт был прочитан.

Некоторые старые экзотические архитектуры действительно имели разные «размер слова». В этих машинах 10 бит могут быть общим размером.

И, наконец, процессоры почти всегда совместимы с обратной связью. Например, Intel поддерживала полную совместимость с инструкциями от 386. Если вы возьмете программу, скомпилированную для 386, она все равно будет работать на процессоре i7. Изменение размера слова нарушит совместимость. Так что в то время как это возможно, ни один производитель никогда не сделает это.

2

Поскольку компьютеры адресуют память на уровне байтов, поэтому любое меньшее, чем байт, не адресуется.

5

Аппаратное обеспечение предназначено для считывания данных в блоках (байты, более поздние слова и слова). Это обеспечивает большую эффективность, чем доступ к отдельным битам, а также предлагает более широкий диапазон адресов. Таким образом, большинство данных выравнивается по крайней мере с байтовой границей. Существуют кодировки, которые работают с битовыми последовательностями, а не с байтами, но они довольно редки.

В настоящее время данные чаще всего выравниваются по границе dword (32-разрядной) в любом случае. Более того, некоторые аппаратные средства (например, ARM) не могут получить доступ к смещенным многобайтовым переменным, то есть 16-битовое слово не может «пересекать» границу dword - исключение будет выбрано.