Recentemente, comecei a aprender a escrever código e, no meu livro, me deparei com essa pergunta. "Por que um valor booleano é armazenado como um byte dentro de um computador quando requer apenas um bit?" alguém pode lançar mais luz sobre essa questão?
programming-languages
c++
boolean
Mr. 1.0
fonte
fonte
Respostas:
Tem a ver com o que a CPU pode resolver facilmente. Por exemplo, em um processador x86, há um
eax
(32 bits),ax
(16 bits) e umah
(8 bits), mas nenhum registro de bit único. Portanto, para usar um único bit, a CPU precisará fazer uma leitura / modificação / gravação para alterar o valor. Se estiver armazenado como um byte, uma única leitura ou gravação poderá ser usada para inspecionar / alterar o valor.Além disso, pode-se perguntar se seria melhor usar um único bit versus um byte completo, afinal um byte estará desperdiçando 7 bits. A menos que o espaço seja uma restrição que se deve procurar pelo byte, porque, pelo menos o x86 e acho que outros, geralmente há instruções para definir / limpar rapidamente um bool muito mais rápido que a leitura / modificação / gravação de um único bit . Em medições pessoais, vi o método de leitura / modificação / gravação ser 5 vezes mais lento que o método de instrução única.
fonte
Como o @ barrem23 explica , os dados devem ser endereçáveis e o menor limite nas arquiteturas convencionais é um byte.
Mas, como essa pergunta está marcada como c ++ , vale a pena ressaltar que
std::vector<bool>
é especializada para permitir que elementos individuais sejam armazenados como bits . Isso economizará espaço sacrificando algumas funcionalidades (por exemplo,std::search
pode não funcionar).fonte