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?
programming-languages
c++
boolean
Mr. 1.0
źródło
źródło
Odpowiedzi:
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) iah
(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.
źródło
Jak wyjaśnia @ barrem23 , dane muszą być adresowalne , a najmniejszą granicą konwencjonalnych architektur jest bajt.
Ale ponieważ kwestia ta jest oznaczona jako C ++ , może warto zwrócić uwagę, że
std::vector<bool>
jest specjalizuje się w celu umożliwienia poszczególne elementy mają być przechowywane jako bity . Pozwoli to zaoszczędzić miejsce, poświęcając część funkcjonalności (na przykładstd::search
może nie działać).źródło