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 ?
Réponses
Trop de publicités?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).
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.
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 .
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.