Saltar al contenido

En C, ¿cuánto espacio ocupa un bool (booleano) tomar? ¿Es 1 bit, 1 byte o algo más?

Necesitamos tu ayuda para difundir nuestros posts con relación a las ciencias de la computación.

Solución:

Si te refieres a C99 _Bool tratar:

printf("%zun", sizeof(_Bool)); /* Typically 1. */

Tenga en cuenta que el estándar dice:

6.2.5

Un objeto declarado como tipo _Bool es lo suficientemente grande para almacenar los valores 0 y 1.

El tamaño no puede ser inferior a un byte. Pero sería legal tener más de un byte.

La “cosa” direccionable más pequeña en C es un char. Cada variable en C debe tener una dirección única, por lo tanto, su bool no puede ser más pequeño que eso. (Tenga en cuenta que char aunque no siempre es de 8 bits)

En los estándares C más antiguos, no había tal tipo definido. Sin embargo, muchos microcontroladores integrados incluyen circuitos especiales para permitir un procesamiento eficiente de indicadores de un solo bit; algunos permiten dicho procesamiento de variables almacenadas en cualquier lugar, mientras que otros solo lo permiten para variables almacenadas en una región particular de la memoria. Los compiladores para tales procesadores permiten variables individuales de static duración a declarar como tipo “bit”; tales variables generalmente solo tomarán un bit de almacenamiento (asignado, si es necesario, dentro de una región que pueda acomodar tal uso). Algunos compiladores permitirán que las variables automáticas de las rutinas no recursivas se declaren como de tipo ‘bit’, pero en silencio las considerarán como ‘static’ (los enlazadores provistos con dichos compiladores requieren que las rutinas identifiquen a qué otras rutinas llaman, y rechazarán los programas en los que las rutinas que no están etiquetadas como reentrantes se llaman entre sí de forma mutuamente recursiva).

Algunos puntos dignos de mención:

  1. Procesadores cuyos compiladores admiten “true” las variables de bit generalmente pueden establecer, borrar o bifurcarse sobre los valores de tales variables más rápido y con menos código del que podrían establecer, borrar o bifurcarse sobre indicadores de ancho de byte;
  2. Muchos de estos procesadores tienen cantidades muy pequeñas de RAM. En muchos procesadores, la cuestión de si las variables individuales (a diferencia de array elementos o campos de estructura) toman un bit o un byte cada uno no valdría la pena preocuparse. Sin embargo, en un procesador con 25 bytes de memoria, hay una gran diferencia entre tener 16 banderas que toman un byte cada una y tener las 16 banderas combinadas en dos bytes.
  3. Al menos en los compiladores que he visto, las variables de bit no pueden usarse como campos de estructura ni array elementos, ni se puede tomar la dirección de uno.

No sé lo suficiente sobre C99 o versiones posteriores de los estándares C o C++ para saber si tienen algún concepto de un tipo de bit independiente que no tiene una dirección. No puedo pensar en ninguna razón por la que tal cosa no debería ser posible, especialmente los estándares ya reconocen el concepto de cosas como la estructura de campos de bits que se comportan de manera muy similar a los valores pero no tienen direcciones. Es posible que algunos enlazadores no admitan tales variables, pero dichos enlazadores podrían acomodarse haciendo que su tamaño real dependa de la implementación (de hecho, aparte de la velocidad del programa o el uso total de la memoria, sería imposible saber si tales variables recibieron 1 bit o 64 bits). cada).

Comentarios y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *