209 votes

Pourquoi un booléen est-il 1 octet et pas 1 bit de taille?

En C ++,

  • Pourquoi un booléen est-il 1 octet et pas 1 bit de taille?
  • Pourquoi n'y a-t-il pas de types comme des entiers 4 bits ou 2 bits?

Je manque les éléments ci-dessus lors de l'écriture d'un émulateur pour un processeur

307voto

Paul Tomblin Points 83687

Parce que le processeur ne peut rien traiter de plus petit qu'un octet.

57voto

Nawaz Points 148870

De Wikipedia:

Historiquement, un octet est le nombre de bits utilisés pour coder un caractère unique de texte dans un ordinateur et il est pour cette raison, la base adressable élément dans de nombreux ordinateur architectures.

Si l'octet est la base adressable de l'unité, au-dessous de laquelle l'architecture de l'ordinateur ne peut pas combler. Et depuis il n'a pas (probablement) existent ordinateurs qui soutiennent les 4 bits de l'octet, vous n'avez pas de 4 bits bool etc.

Toutefois, si vous pouvez concevoir une architecture de ce type qui peuvent résoudre les 4 bits de base adressable de l'unité, alors vous devrez bool de la taille de 4 bits alors, sur cet ordinateur uniquement!

26voto

Jay Points 14781

De retour dans les vieux jours, quand je devais aller à l'école dans un blizzard en rage, en montée dans les deux sens, et le déjeuner était quelque soit l'animal, nous pouvons suivre dans les bois derrière l'école et de les tuer avec nos mains nues, les ordinateurs avaient beaucoup moins de mémoire disponible qu'aujourd'hui. Le premier ordinateur que j'ai jamais utilisé a 6K de RAM. Pas 6 méga-octets, pas 6 go, 6 kilo-octets. Dans cet environnement, il fait beaucoup de sens pour emballer autant de booléens en un int comme vous avez pu, et donc nous l'utilisons régulièrement des opérations de les prendre et de les mettre dans.

Aujourd'hui, quand les gens vont se moquer de vous pour avoir seulement 1 GO de RAM, et le seul endroit où vous pourriez trouver un disque dur avec moins de 200 GO est à une boutique d'antiquités, c'est juste ne vaut pas la peine de le pack bits.

18voto

sukru Points 1702

La réponse la plus simple est: c'est parce que la CPU adresse la mémoire en octets et non en bits, et les opérations au niveau des bits sont très lentes.

Cependant, il est possible d'utiliser l'allocation de taille en bits en C ++. Il existe une spécialisation std :: vector pour les vecteurs bits, ainsi que des structures prenant des entrées de taille binaire.

11voto

Paul Sasik Points 37766

Vous pourriez avoir des bools 1 bit et des ints 4 et 2 bits. Mais cela ferait un ensemble d'instructions bizarres sans gain de performances, car c'est une façon peu naturelle de regarder l'architecture. En réalité, il est logique de "gaspiller" une meilleure partie d'un octet plutôt que d'essayer de récupérer ces données inutilisées.

La seule application qui dérange de mettre plusieurs objets dans un seul octet, d'après mon expérience, est Sql Server.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X