Задать вопрос

Почему bool весит целый байт?

Ведь для его хранения по идее достаточно одного бита, а он весит как тип данных byte, в который можно запихнуть 255 различных чисел.
  • Вопрос задан
  • 14773 просмотра
Подписаться 3 Простой Комментировать
Решения вопроса 3
batChar
@batChar
Потому, что архитектура вычислительной системы не способна адресовать БИТ памяти, минимальная единица - байт.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Предыдущие ораторы ( @batChar @gleb_kudr ) говорили про адресацию памяти. Я думаю, что они неправы: у нас, например, есть битовые поля, которые, по определению, могут быть отдельными битами, не смотря на то, что "байт - минимальная единица адресации в памяти". Невозможность адресовать отдельные биты памяти -- не основная причина.

Проблема не в адресации, а скорее в стандарте: если посмотреть определение оператора sizeof (ISO/IEC 14882:1998, п.5.3.3), то стандарт запрещает применять его к битовым полям, но разрешает к типу bool (говоря, что результат, кстати, не обязан быть равен 1). А поскольку sizeof возвращает размер объекта в байтах, а конеченые объекты должны иметь ненулевой размер, то и размер bool должен быть не меньше байта.

Я думаю, что стандарт вполне мог бы запретить применять sizeof к bool и разрешить паковать значения bool, но не сделал этого, т.к. это, скорее всего, неэффективно.

С другой стороны, у std::vector есть специализация std::vector<bool>, "булевский вектор", которая обычно требует меньше памяти, чем массив значений типа bool.
Ответ написан
@gleb_kudr
Потому что байт - минимальная единица адресации в памяти.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы