Por que um valor booleano é armazenado como um byte dentro de um computador quando requer apenas um bit


32

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?


10
Isso não é estritamente falando verdade. Algumas linguagens (como C / C ++) fornecem maneiras de armazenar valores booleanos como bits únicos, se esses bits estiverem agrupados em um único byte. Em outras palavras, em C, você pode armazenar oito booleanos em um byte. Porém, poucos usam isso, pois a memória é barata e os processadores manipulam dados em pedaços de 8/16/32/64 bits.
Gort the Robot

Esta resposta a uma pergunta semelhante é o que você deve ver! Você terá uma referência enorme lá ... Saúde!
Sam


Respostas:


49

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 um ah(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.


6
A única palavra que está faltando é "Alinhamento dos limites".
Manoj R

3
Por outro lado, eu vi uma aceleração de 2x usando bits individuais, provavelmente devido ao melhor uso do cache com um conjunto de dados menor.
Michael Borgwardt

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.