tipos que programacion ocupa long float ejemplos ejemplo datos cuantos bytes c++ cpu-architecture

c++ - que - ¿Por qué un booleano de 1 byte y no 1 bit de tamaño?



tipos de variables en java ejemplos (13)

De la Wikipedia :

Históricamente, un byte era la cantidad de bits utilizados para codificar un solo carácter de texto en una computadora y es por esta razón el elemento direccionable básico en muchas arquitecturas de computadora.

Entonces byte es la unidad básica direccionable , debajo de la cual la arquitectura de la computadora no puede resolver. Y dado que no existe (probablemente) computadoras que admitan byte de 4 bits, no tiene bool 4 bits, etc.

Sin embargo, si puede diseñar una arquitectura que pueda abordar a 4 bits como unidad direccionable básica, entonces tendrá un bool de tamaño de 4 bits, ¡solo en esa computadora!

En C ++,

  • ¿Por qué un booleano de 1 byte y no 1 bit de tamaño?
  • ¿Por qué no hay tipos como enteros de 4 o 2 bits?

Me estoy perdiendo las cosas de arriba cuando escribo un emulador para una CPU


El byte es la unidad más pequeña de almacenamiento de datos digitales de una computadora. En una computadora, la memoria RAM tiene millones de bytes y cualquiera de ellos tiene una dirección. Si tuviera una dirección para cada bit, una computadora podría administrar 8 veces menos RAM que lo que puede.

Más información: Wikipedia


En los viejos tiempos cuando tenía que caminar a la escuela en una tormenta de nieve, cuesta arriba y en el almuerzo era cualquier animal que pudiéramos rastrear en el bosque detrás de la escuela y matar con nuestras propias manos, las computadoras tenían mucha menos memoria disponible que hoy. La primera computadora que utilicé tenía 6K de RAM. No 6 megabytes, no 6 gigabytes, 6 kilobytes. En ese entorno, tenía mucho sentido empaquetar tantos booleanos en un int como podías, y por eso usábamos regularmente las operaciones para sacarlos y ponerlos.

Hoy, cuando la gente se burla de ti por tener solo 1 GB de RAM, y el único lugar donde puedes encontrar un disco duro con menos de 200 GB es en una tienda de antigüedades, simplemente no vale la pena empacar.


Incluso cuando el tamaño mínimo posible es de 1 byte, puede tener 8 bits de información booleana en 1 byte:

http://en.wikipedia.org/wiki/Bit_array

El lenguaje Julia tiene BitArray, por ejemplo, y leí acerca de las implementaciones de C ++.


La respuesta más fácil es; es porque la CPU se dirige a la memoria en bytes y no en bits, y las operaciones en modo bit son muy lentas.

Sin embargo, es posible usar la asignación de tamaño de bits en C ++. Hay una especialización std :: vector para vectores de bits, y también estructura tomando entradas de tamaño de bit.


Piensa en cómo implementar esto en tu nivel de emulador ...

bool a[10] = {false}; bool &rbool = a[3]; bool *pbool = a + 3; assert(pbool == &rbool); rbool = true; assert(*pbool); *pbool = false; assert(!rbool);


Podrías tener boles de 1 bit y 4 y 2 bits ints. Pero eso crearía un conjunto de instrucciones raras para no aumentar el rendimiento porque es una forma antinatural de ver la arquitectura. En realidad, tiene sentido "desperdiciar" una mejor parte de un byte en lugar de tratar de recuperar los datos no utilizados.

La única aplicación que se molesta en empaquetar varios bools en un solo byte, en mi experiencia, es Sql Server.


Porque generalmente, la CPU asigna memoria con 1 byte como la unidad básica, aunque algunas CPU como MIPS usan una palabra de 4 bytes.

Sin embargo, el vector trata bool de una manera especial, con el vector<bool> se asigna un bit para cada bool.


Porque la CPU no puede abordar nada más pequeño que un byte.


Porque un byte es la unidad más pequeña que se puede usar en el idioma.

Pero puedes hacer que bool tome 1 bit por ejemplo si tienes un montón de ellos, por ejemplo. en una estructura, como esta:

struct A { bool a:1, b:1, c:1, d:1, e:1; };


Puede usar campos de bits para obtener enteros de tamaño secundario.

struct X { int val:4; // 4 bit int. };

Aunque normalmente se usa para mapear estructuras con los patrones de bits esperados de hardware exacto:

struct SomThing // 1 byte value (on a system where 8 bits is a byte { int p1:4; // 4 bit field int p2:3; // 3 bit field int p3:1; // 1 bit };


Un valor booleano sería un bit si tu CPU fuera una CPU de 1 bit.

En general, el tamaño de bit de una CPU (por ejemplo, 8 bits, 16 bits, 32 bits, etc.) es una medida del tamaño más pequeño de datos que puede manipular la CPU, por lo que TAMBIÉN es el tamaño del espacio de direcciones. (Dado que los punteros y los datos son en muchos niveles lo mismo).


bool puede ser de un byte: el tamaño direccionable más pequeño de la CPU, o puede ser más grande. No es inusual tener bool para tener el tamaño de int para fines de rendimiento. Si para fines específicos (por ejemplo, simulación de hardware) necesita un tipo con N bits, puede encontrar una biblioteca para eso (por ejemplo, la biblioteca GBL tiene BitSet<N> ). Si le preocupa el tamaño de bool (probablemente tenga un contenedor grande), entonces puede empaquetar trozos usted mismo, o use std::vector<bool> que lo hará por usted (tenga cuidado con este último, ya que no lo hace) t satisfacer los requisitos del contenedor).