27 votes

Pourquoi un char et un bool ont-ils la même taille en c++ ?

Je suis en train de lire Le langage de programmation C++. Stroustrup y affirme que sizeof(char) == 1 y 1 <= sizeof(bool) . Les spécificités dépendent de l'implémentation. Pourquoi une valeur aussi simple qu'un booléen prendrait-elle la même place qu'un caractère ?

62voto

Cybis Points 5062

Dans les architectures informatiques modernes, un octet est la plus petite unité adressable de la mémoire. Pour regrouper plusieurs bits dans un octet, il faut appliquer des opérations supplémentaires de décalage de bits. Au niveau du compilateur, il s'agit d'un compromis entre les exigences en matière de mémoire et de vitesse (et dans les logiciels hautes performances, ces opérations supplémentaires de décalage de bits peuvent s'additionner et ralentir inutilement l'application).

18voto

Robert Gamble Points 41984

Parce qu'en C++, on peut prendre l'adresse d'un booléen et que la plupart des machines ne peuvent pas adresser des bits individuels.

11voto

Kibbee Points 36474

Il prend le même espace, car la plus petite quantité d'espace que vous pouvez écrire en mémoire est un seul octet. Les deux valeurs sont stockées dans un octet. Bien que vous n'ayez théoriquement besoin que d'un bit pour signifier une valeur booléenne, vous devez toujours disposer d'un octet entier pour stocker la valeur.

4voto

Rob Walker Points 25840

Théoriquement, vous n'avez besoin que d'un seul bit pour un bool, mais travailler avec moins d'un octet de données est compliqué. Il faut plus d'instructions pour arriver à quelque chose et on n'en profite pas vraiment.

Si vous souhaitez regrouper plusieurs booléens dans un seul octet, vous pouvez utiliser un fichier de type structure de champ de bits .

2voto

James Curran Points 55356

En fait, dans la plupart des implémentations que je connais, sizeof(bool) == sizeof(int). "int" est destiné à être la taille de données qui est la plus efficace pour le CPU à travailler avec. Par conséquent, les éléments qui n'ont pas de taille spécifique (comme les "chars") ont la même taille qu'un int. Si vous en aviez un grand nombre par objet, vous pourriez vouloir implémenter un moyen de les empaqueter pour le stockage, mais pendant les calculs normaux, il faut laisser sa taille native.

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