Recientemente comencé a aprender a escribir código, y en mi libro me encontré con esta pregunta. "¿Por qué se almacena un valor booleano como un byte dentro de una computadora cuando solo requiere un bit?" ¿Alguien puede arrojar más luz sobre esta pregunta?
programming-languages
c++
boolean
Señor 1.0
fuente
fuente
Respuestas:
Tiene que ver con lo que la CPU puede abordar fácilmente. Por ejemplo, en un procesador x86 hay un
eax
(32 bits),ax
(16 bits) y unah
(8 bits) pero no hay un solo registro de bits. Entonces, para que pueda usar un solo bit, la CPU tendrá que hacer una lectura / modificación / escritura para cambiar el valor. Si se almacena como un byte, se puede usar una sola lectura o escritura para inspeccionar / cambiar el valor.Además, uno podría preguntarse si sería mejor usar un solo bit frente a un byte completo, ya que un byte desperdiciará 7 bits. A menos que el espacio sea una restricción, uno debería ir por el byte porque, al menos el x86 y creo que otros, generalmente hay instrucciones para establecer / borrar rápidamente un bool que es mucho más rápido que la lectura / modificación / escritura de un solo bit . Según mediciones personales, he visto que el método de lectura / mod / escritura es 5 veces más lento que el método de instrucción única.
fuente
Como explica @ barrem23 , los datos deben ser direccionables , y el límite más pequeño en las arquitecturas convencionales es un byte.
Pero dado que esta pregunta está etiquetada como c ++ , puede valer la pena señalar que
std::vector<bool>
está especializada para permitir que elementos individuales se almacenen como bits . Esto ahorrará espacio al sacrificar alguna funcionalidad (por ejemplo,std::search
puede no funcionar).fuente