Почему наименьшее значение может быть сохранено в байте (8 бит) & не бит (1 бит) в памяти? Даже булевы хранятся в байтах. Будем ли мы когда-либо ударять наименьшее число до 32 или 64 бит, например, в регистре на CPU?Почему наименьшее значение, которое можно сохранить, это байт (8 бит), а не бит (1 бит)?
ответ
Основные методы доступа к процессору ограничены размером самого маленького используемого регистра. На большинстве архитектур этот размер составляет 8 бит. Вы можете использовать их меньшую часть; например, C имеет функцию битового поля в структурах, которая позволит объединять поля, которые должны быть только определенной длиной бит. Доступ по-прежнему требует, чтобы весь байт был прочитан.
Некоторые старые экзотические архитектуры действительно имели разные «размер слова». В этих машинах 10 бит могут быть общим размером.
И, наконец, процессоры почти всегда совместимы с обратной связью. Например, Intel поддерживала полную совместимость с инструкциями от 386. Если вы возьмете программу, скомпилированную для 386, она все равно будет работать на процессоре i7. Изменение размера слова нарушит совместимость. Так что в то время как это возможно, ни один производитель никогда не сделает это.
Поскольку компьютеры адресуют память на уровне байтов, поэтому любое меньшее, чем байт, не адресуется.
Аппаратное обеспечение предназначено для считывания данных в блоках (байты, более поздние слова и слова). Это обеспечивает большую эффективность, чем доступ к отдельным битам, а также предлагает более широкий диапазон адресов. Таким образом, большинство данных выравнивается по крайней мере с байтовой границей. Существуют кодировки, которые работают с битовыми последовательностями, а не с байтами, но они довольно редки.
В настоящее время данные чаще всего выравниваются по границе dword (32-разрядной) в любом случае. Более того, некоторые аппаратные средства (например, ARM) не могут получить доступ к смещенным многобайтовым переменным, то есть 16-битовое слово не может «пересекать» границу dword - исключение будет выбрано.
Пока вы не можете сохранить один бит, вы можете использовать оптимизацию компилятора для объединения нескольких бит/булевых в пространство общей памяти. Это обычно используется для битовых флагов или перечислений. Вы все равно не будете хранить один бит, но вы можете избежать хранения 8 байтов для 8 логических значений. –