부울 값이 1 비트 만 필요할 때 컴퓨터 내부에 바이트로 저장되는 이유


32

나는 최근에 코드 작성을 배우기 시작했고, 내 책에서이 질문에 부딪쳤다. "부울 값이 1 비트 만 필요할 때 컴퓨터 내부에 바이트로 저장되는 이유는 무엇입니까?" 누군가이 질문에 대해 더 많은 것을 밝힐 수 있습니까?


10
이것은 엄격하게 사실이 아닙니다. C / C ++와 같은 일부 언어는 이러한 비트가 단일 바이트로 묶인 경우 부울 값을 단일 비트로 저장하는 방법을 제공합니다. 즉, C에서는 8 개의 부울을 바이트로 저장할 수 있습니다. 그러나 메모리가 저렴하고 프로세서가 8/16/32/64 비트 청크로 데이터를 조작하기 때문에 이것을 사용하는 사람은 거의 없습니다.
로봇 고트

비슷한 질문에 대한답변 은 꼭보아야 할 것입니다! 당신은 거기에서 큰 참조를 얻을 것이다 ... 건배!
Sam


답변:


49

CPU가 쉽게 처리 할 수있는 것과 관련이 있습니다. 예를 들어 x86 프로세서에는 eax(32 비트), ax(16 비트) 및 ah(8 비트)가 있지만 단일 비트 레지스터는 없습니다. 따라서 단일 비트를 사용하려면 CPU가 값을 변경하기 위해 읽기 / 수정 / 쓰기를 수행해야합니다. 바이트로 저장된 경우 단일 읽기 또는 쓰기를 사용하여 값을 검사 / 변경할 수 있습니다.

또한 모든 바이트가 7 비트를 낭비한 후에 단일 비트 대 전체 바이트를 사용하는 것이 더 나은지 궁금 할 것입니다. 공간이 제약 조건이 아니라면 적어도 x86과 다른 사람들이 생각하기 때문에 바이트로 가야 할 공간이 없다면 일반적으로 단일 비트의 읽기 / 수정 / 쓰기보다 훨씬 빠른 부울을 신속하게 설정 / 해제하는 지침이 있습니다. . 개인적 측정에서 나는 읽기 / 수정 / 쓰기 방법이 단일 명령 방법보다 5 배 느리다는 것을 알았습니다.


6
유일하게 누락 된 단어는 "경계 정렬"입니다.
Manoj R

3
반면에, 작은 데이터 세트로 더 나은 캐시 사용으로 인해 개별 비트를 사용하는 속도가 2 배 빨라졌습니다.
Michael Borgwardt

5

@ barrem23에서 설명했듯이 데이터는 주소 지정가능 해야하며 기존 아키텍처에서 가장 작은 경계는 바이트입니다.

이 질문에로 태그되어 있기 때문에 그러나 이이 밖으로, 그것은 가치가 포인팅 할 수 std::vector<bool>있습니다 전문 수 있도록 개별 요소가 비트를 저장하는 . 일부 기능을 희생하여 공간을 절약합니다 (예 : std::search작동하지 않을 수 있음).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.