Perché un valore booleano viene memorizzato come byte all'interno di un computer quando richiede solo un bit


32

Di recente ho iniziato a imparare a scrivere codice e nel mio libro mi sono imbattuto in questa domanda. "Perché un valore booleano è memorizzato come byte all'interno di un computer quando richiede solo un bit?" qualcuno può far luce su questa domanda?


10
Questo non è strettamente vero. Alcuni linguaggi (come C / C ++) forniscono modi per memorizzare valori booleani come bit singoli, se questi bit sono raggruppati in un singolo byte. In altre parole, in C, è possibile memorizzare otto booleani in un byte. Ma pochi lo usano mai poiché la memoria è economica e i processori manipolano i dati in blocchi di bit 8/16/32/64.
Gort il robot il

Questa risposta a una domanda simile è ciò che dovresti vedere! Riceverai un enorme riferimento lì ... Saluti!
Sam,


Risposte:


49

Ha a che fare con ciò che la CPU può facilmente affrontare. Ad esempio su un processore x86 c'è un eax(32 bit), ax(16 bit) e un ah(8 bit) ma nessun registro a singolo bit. Quindi, per usare un singolo bit, la CPU dovrà fare una lettura / modifica / scrittura per cambiare il valore. Se è memorizzato come byte, è possibile utilizzare una sola lettura o scrittura per ispezionare / modificare il valore.

Inoltre, ci si potrebbe chiedere se sarebbe meglio usare un singolo bit contro un intero byte, dopo tutto un byte sprecherà 7 bit. A meno che lo spazio non sia un vincolo, si dovrebbe andare per il byte perché, almeno per x86 e penso che altri, di solito ci sono le istruzioni per impostare / cancellare rapidamente un bool che è molto più veloce della lettura / modifica / scrittura di un singolo bit . Dalle misurazioni personali ho visto che il metodo read / mod / write è 5 volte più lento del metodo a singola istruzione.


6
L'unica parola che ti manca è "Allineamento dei confini".
Manoj R

3
D'altra parte, ho visto una velocità 2x dall'uso di singoli bit, presumibilmente a causa del migliore utilizzo della cache con un set di dati più piccolo.
Michael Borgwardt,

5

Come spiega @ barrem23 , i dati devono essere indirizzabili e il limite più piccolo delle architetture convenzionali è un byte.

Ma poiché questa domanda è taggata come , può valere la pena sottolineare che std::vector<bool>è specializzato per consentire la memorizzazione di singoli elementi come bit . Ciò consentirà di risparmiare spazio sacrificando alcune funzionalità (ad esempio, std::searchpotrebbe non funzionare).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.