2011-01-05 16 views
3

Warum ist der kleinste Wert, der gespeichert werden kann ein Byte (8bit) & kein Bit (1bit) im Speicher? Sogar Boolesche Werte werden als Bytes gespeichert. Werden wir jemals die kleinste Zahl auf 32 oder 64 Bits wie Register auf der CPU stoßen?Warum ist der kleinste Wert, der gespeichert werden kann, ein Byte (8 Bit) und kein Bit (1 Bit)?

+2

Während Sie kein einzelnes Bit speichern können, können Sie Compiler-Optimierungen verwenden, um mehrere Bits/Booleans in gemeinsamen Speicherbereich zu gruppieren. Dies wird üblicherweise für Bit-Flags oder Enumerationen verwendet. Sie werden immer noch kein einzelnes Bit speichern, aber Sie können vermeiden, 8 Bytes für 8 boolesche Werte zu speichern. –

Antwort

1

Die zugrunde liegenden Methoden des Prozessorzugriffs beschränken sich auf die Größe des kleinsten verwendbaren Registers. Bei den meisten Architekturen beträgt diese Größe 8 Bit. Sie können kleinere Teile davon verwenden; Zum Beispiel hat C das Bitfeld-Merkmal in Strukturen, das es erlaubt, Felder zu kombinieren, die nur bestimmte Bitlängen haben müssen. Der Zugriff erfordert weiterhin, dass das gesamte Byte gelesen wird.

Einige ältere exotische Architekturen hatten tatsächlich eine andere "Wortgröße". In diesen Maschinen können 10 Bits die übliche Größe sein.

Schließlich sind Prozessoren fast immer abwärtskompatibel. So hat Intel zum Beispiel die komplette Befehlskompatibilität von der 386 bis heute beibehalten. Wenn Sie ein Programm ausführen, das für den 386 kompiliert wurde, wird es weiterhin auf einem i7-Prozessor ausgeführt. Das Ändern der Wortgröße würde die Kompatibilität beeinträchtigen. Während es möglich ist, wird kein Hersteller es jemals tun.

2

Da Computer Speicher auf Byte-Ebene adressieren, ist alles, was kleiner als ein Byte ist, nicht adressierbar.

5

Die Hardware ist gebaut, um Daten in Blöcken (Bytes, spätere Wörter und Dwords) zu lesen. Dies bietet eine höhere Effizienz als der Zugriff auf einzelne Bits und bietet auch einen größeren Adressierungsbereich. Daher sind die meisten Daten auf mindestens die Bytegrenze ausgerichtet. Es gibt Codierungen, die mit Bitfolgen statt mit Bytes arbeiten, aber sie sind ziemlich selten.

Heutzutage werden die Daten sowieso meistens auf die dword (32-bit) Grenze ausgerichtet. Darüber hinaus kann eine gewisse Hardware (z. B. ARM) nicht auf fehlausgerichtete Multibyte-Variablen zugreifen, d. H. 16-Bit-Wort kann dword-Grenze nicht "kreuzen" - Ausnahme wird ausgelöst.