Warum wird ein Boolescher Wert als Byte in einem Computer gespeichert, wenn nur ein Bit benötigt wird?


32

Ich habe kürzlich angefangen, das Schreiben von Code zu lernen, und in meinem Buch bin ich auf diese Frage gestoßen. "Warum wird ein Boolescher Wert als Byte in einem Computer gespeichert, wenn er nur ein Bit benötigt?" Kann jemand mehr Licht in diese Frage bringen?


10
Dies ist streng genommen nicht wahr. Einige Sprachen (wie C / C ++) bieten Möglichkeiten zum Speichern von Booleschen Werten als einzelne Bits, wenn diese Bits in einem einzelnen Byte gebündelt sind. Mit anderen Worten, in C können Sie acht Boolesche Werte in einem Byte speichern. Dies wird jedoch nur von wenigen verwendet, da der Speicher billig ist und Prozessoren Daten in 8/16/32/64-Bit-Blöcken bearbeiten.
Gort the Robot

Diese Antwort auf eine ähnliche Frage sollten Sie sehen! Sie werden dort eine große Referenz bekommen ... Prost!
Sam


Antworten:


49

Es hat damit zu tun, was die CPU problemlos ansprechen kann. Beispielsweise gibt es auf einem x86-Prozessor ein eax(32 Bit), ein ax(16 Bit) und ein ah(8 Bit), jedoch kein Einzelbitregister. Damit ein einzelnes Bit verwendet werden kann, muss die CPU einen Lese- / Änderungs- / Schreibvorgang ausführen, um den Wert zu ändern. Wenn es als Byte gespeichert ist, kann ein einzelnes Lesen oder Schreiben verwendet werden, um den Wert zu prüfen / zu ändern.

Außerdem könnte man sich fragen, ob es besser wäre, ein einzelnes Bit anstelle eines vollständigen Bytes zu verwenden, schließlich würde ein Byte 7 Bits verschwenden. Sofern der Speicherplatz keine Einschränkung darstellt, sollte das Byte verwendet werden, da es, zumindest beim x86 und meiner Meinung nach bei anderen, normalerweise Anweisungen zum schnellen Setzen / Löschen eines Bools gibt, die viel schneller sind als das Lesen / Ändern / Schreiben eines einzelnen Bits . Aus persönlichen Messungen habe ich gesehen, dass die Lese / Mod / Schreib-Methode 5x langsamer ist als die Einzelanweisungsmethode.


6
Das einzige Wort, das Sie vermissen, ist "Boundary Alignment".
Manoj R

3
Andererseits habe ich eine zweifache Beschleunigung durch die Verwendung einzelner Bits gesehen, vermutlich aufgrund einer besseren Cache-Nutzung mit einem kleineren Datensatz.
Michael Borgwardt

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.