Недавно я начал учиться писать код, и в своей книге я столкнулся с этим вопросом. «Почему логическое значение хранится в байтах внутри компьютера, когда ему требуется только один бит?» может кто-то пролить больше света на этот вопрос?
Недавно я начал учиться писать код, и в своей книге я столкнулся с этим вопросом. «Почему логическое значение хранится в байтах внутри компьютера, когда ему требуется только один бит?» может кто-то пролить больше света на этот вопрос?
Ответы:
Это связано с тем, что процессор может легко решить. Например, на процессоре x86 есть eax
(32 бита), ax
(16 бит) и a ah
(8 бит), но нет однобитового регистра. Таким образом, чтобы использовать один бит, ЦПУ должен будет выполнить чтение / изменение / запись для изменения значения. Если он хранится в виде байта, для проверки / изменения значения можно использовать одно чтение или запись.
Кроме того, может возникнуть вопрос, лучше ли использовать один бит против полного байта, ведь байт будет тратить 7 бит. Если пробел не является ограничением, нужно идти за байтом, потому что, по крайней мере, x86 и, я думаю, другие, обычно есть инструкции для быстрой установки / очистки bool, который намного быстрее, чем чтение / изменение / запись одного бита , Из личных измерений я видел, что метод чтения / модификации / записи был в 5 раз медленнее, чем метод с одной инструкцией.
Как объясняет @ barrem23 , данные должны быть адресуемыми , а наименьшей границей в традиционных архитектурах является байт.
Но так как этот вопрос помечен как c ++ , возможно, стоит отметить, что std::vector<bool>
он специализирован для хранения отдельных элементов в виде битов . Это сэкономит место, пожертвовав некоторыми функциями (например, std::search
может не работать).