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

32

Recentemente ho iniziato a imparare a scrivere codice, e nel mio libro ho trovato questa domanda. "Perché un valore booleano è memorizzato come byte all'interno di un computer quando richiede solo un bit?" qualcuno può fare più luce su questa domanda?

    
posta Mr. 1.0 29.01.2013 - 03:43
fonte

2 risposte

47

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

Inoltre ci si potrebbe chiedere se sarebbe meglio usare un singolo bit rispetto a un byte intero, dopotutto un byte sprecherà 7 bit. A meno che lo spazio non sia un vincolo, l'uno dovrebbe andare per il byte perché, almeno l'x86 e io pensiamo gli altri, di solito c'è una istruzione per impostare / cancellare rapidamente un bool che è molto più veloce della lettura / modifica / scrittura di un singolo bit . Dalle misurazioni personali ho visto il metodo read / mod / write essere 5 volte più lento del metodo a singola istruzione.

    
risposta data 29.01.2013 - 04:10
fonte
4

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

Ma dal momento che questa domanda è contrassegnata come , potrebbe essere utile sottolineare che std::vector<bool> è specializzato per consentire singoli elementi da memorizzare come bit . Ciò consentirà di risparmiare spazio sacrificando alcune funzionalità (ad esempio, std::search potrebbe non funzionare).

    
risposta data 10.03.2013 - 00:28
fonte

Leggi altre domande sui tag