나는 최근에 코드 작성을 배우기 시작했고, 내 책에서이 질문에 부딪쳤다. "부울 값이 1 비트 만 필요할 때 컴퓨터 내부에 바이트로 저장되는 이유는 무엇입니까?" 누군가이 질문에 대해 더 많은 것을 밝힐 수 있습니까?
나는 최근에 코드 작성을 배우기 시작했고, 내 책에서이 질문에 부딪쳤다. "부울 값이 1 비트 만 필요할 때 컴퓨터 내부에 바이트로 저장되는 이유는 무엇입니까?" 누군가이 질문에 대해 더 많은 것을 밝힐 수 있습니까?
답변:
CPU가 쉽게 처리 할 수있는 것과 관련이 있습니다. 예를 들어 x86 프로세서에는 eax
(32 비트), ax
(16 비트) 및 ah
(8 비트)가 있지만 단일 비트 레지스터는 없습니다. 따라서 단일 비트를 사용하려면 CPU가 값을 변경하기 위해 읽기 / 수정 / 쓰기를 수행해야합니다. 바이트로 저장된 경우 단일 읽기 또는 쓰기를 사용하여 값을 검사 / 변경할 수 있습니다.
또한 모든 바이트가 7 비트를 낭비한 후에 단일 비트 대 전체 바이트를 사용하는 것이 더 나은지 궁금 할 것입니다. 공간이 제약 조건이 아니라면 적어도 x86과 다른 사람들이 생각하기 때문에 바이트로 가야 할 공간이 없다면 일반적으로 단일 비트의 읽기 / 수정 / 쓰기보다 훨씬 빠른 부울을 신속하게 설정 / 해제하는 지침이 있습니다. . 개인적 측정에서 나는 읽기 / 수정 / 쓰기 방법이 단일 명령 방법보다 5 배 느리다는 것을 알았습니다.
@ barrem23에서 설명했듯이 데이터는 주소 지정 이 가능 해야하며 기존 아키텍처에서 가장 작은 경계는 바이트입니다.
이 질문에로 태그되어 있기 때문에 그러나 C ++ 이이 밖으로, 그것은 가치가 포인팅 할 수 std::vector<bool>
있습니다 전문 수 있도록 개별 요소가 비트를 저장하는 . 일부 기능을 희생하여 공간을 절약합니다 (예 : std::search
작동하지 않을 수 있음).