A boolean
tipo normalmente sigue la unidad más pequeña de memoria direccionable de la máquina de destino (es decir, generalmente el byte de 8bits).
El acceso a la memoria está siempre en "trozos" (múltiplo de palabras, esto es para la eficiencia a nivel de hardware, transacciones de bus): un poco booleano no puede abordarse "solo" en la mayoría de los sistemas de CPU. Por supuesto, una vez que los datos están contenidos en un registro , a menudo hay instrucciones especializadas para manipular bits de forma independiente.
Por esta razón, es bastante común usar técnicas de "empaquetado de bits" para aumentar la eficiencia en el uso de tipos de datos base "booleanos". Una técnica como enum
(en C) con potencia de 2 códigos es un buen ejemplo. El mismo tipo de truco se encuentra en la mayoría de los idiomas.
Actualizado: Gracias a una excelente discusión, que fue traído a mi atención que sizeof(char)==1
por definición en C++. Por lo tanto, el direccionamiento de un tipo de datos "booleano" está bastante vinculado a la unidad más pequeña de memoria direccionable (refuerza mi punto).
Un bool no tiene 8 bits en mi sistema. Tiene 4 bytes, lo mismo que un int. –
Brian, ¿qué sistema tienes? Pensé lo mismo, pero cuando lo intenté, tanto msvc como gcc me dieron 'sizeof (bool) == 1'. – avakar
@avakar: un sistema integrado (por ejemplo, CPU de 8 bits) sería suficiente. – jldupont