Dlaczego wartość logiczna jest przechowywana w komputerze jako bajt, gdy wymaga tylko jednego bitu


32

Niedawno zacząłem uczyć się pisać kod i w swojej książce natknąłem się na to pytanie. „Dlaczego wartość logiczna jest przechowywana w komputerze jako bajt, gdy wymaga tylko jednego bitu?” czy ktoś może rzucić więcej światła na to pytanie?


10
To nie jest ściśle prawdą. Niektóre języki (jak C / C ++) zapewniają sposoby przechowywania wartości boolowskich jako pojedynczych bitów, jeśli te bity są spakowane w jeden bajt. Innymi słowy, w C można zapisać osiem bajtów w bajcie. Ale niewielu z nich korzysta, ponieważ pamięć jest tania, a procesory manipulują danymi w porcjach 8/16/32/64 bitowych.
Gort the Robot

Oto odpowiedź na podobne pytanie ! Dostaniesz tam ogromne referencje ... Pozdrawiam!
Sam


Odpowiedzi:


49

Ma to związek z tym, co procesor może łatwo rozwiązać. Na przykład procesor x86 ma eax(32 bity), ax(16 bitów) i ah(8 bitów), ale nie ma rejestru jednobitowego. Aby więc użyć jednego bitu, CPU będzie musiał wykonać odczyt / modyfikację / zapis w celu zmiany wartości. Jeśli jest przechowywany jako bajt, do sprawdzenia / zmiany wartości można użyć pojedynczego odczytu lub zapisu.

Dodatkowo można się zastanawiać, czy lepiej byłoby użyć jednego bitu zamiast pełnego bajtu, w końcu bajt marnuje 7 bitów. O ile przestrzeń nie jest ograniczeniem, należy wybrać bajt, ponieważ przynajmniej x86 i myślę, że inni, zwykle są instrukcje, aby szybko ustawić / wyczyścić bool, który jest znacznie szybszy niż odczyt / modyfikacja / zapis jednego bitu . Z osobistych pomiarów widziałem, że metoda odczytu / modu / zapisu jest 5 razy wolniejsza niż metoda pojedynczej instrukcji.


6
Jedynym brakującym słowem jest „Wyrównanie granic”.
Manoj R

3
Z drugiej strony widziałem przyspieszenie 2x przy użyciu pojedynczych bitów, prawdopodobnie ze względu na lepsze użycie pamięci podręcznej przy mniejszym zestawie danych.
Michael Borgwardt

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.