web-dev-qa-db-fra.com

Pourquoi une valeur booléenne est-elle stockée comme un octet à l'intérieur d'un ordinateur quand il ne nécessite qu'un bit

J'ai récemment commencé à apprendre à écrire du code et, dans mon livre, je suis tombé sur cette question. "Pourquoi une valeur booléenne est-elle stockée comme un octet à l'intérieur d'un ordinateur lorsqu'il n'en oblige-t-il qu'un bit?" Quelqu'un peut-il perdre plus de lumière sur cette question?

32
Mr. 1.0

Cela a à voir avec ce que la CPU peut facilement aborder. Par exemple sur un processeur x86, il y a un eax (32 bits), ax (16 bits) et un ah (8 bits) mais pas de registre un peu. Ainsi, afin d'utiliser un seul bit, la CPU devra faire une lecture/modification/écriture pour modifier la valeur. S'il est stocké sous forme d'octet, une seule lecture ou une écriture peut être utilisée pour inspecter/modifier la valeur.

De plus, on pourrait se demander s'il serait préférable d'utiliser un seul bit vs un octet complet, après tout, un octet perdra 7 bits. Sauf si l'espace est une contrainte que celle-ci devrait aller pour l'octet car, au moins le X86 et je pense que d'autres, il y a généralement une instruction pour définir/nettoyer rapidement un bool qui est beaucoup plus rapide que la lecture/modification/écriture d'un seul bit . Des mesures personnelles, j'ai vu la méthode de lecture/mod/écriture être de 5 fois plus lente que la méthode d'instruction unique.

49
barrem23

As @ Barrem23 explique , les données doivent être adressables et la plus petite limite des architectures conventionnelles est un octet.

Mais puisque cette question est étiquetée comme C++ , il peut être utile de souligner que std::vector<bool> est spécialisé pour permettre éléments individuels à stocker en tant que bits . Cela permettra d'économiser de l'espace en sacrifiant certaines fonctionnalités (par exemple, std::search peut ne pas fonctionner).

5
chrisaycock