IT박스

C ++ : bool이 8 비트 인 이유는 무엇입니까?

itboxs 2020. 7. 4. 11:17
반응형

C ++ : bool이 8 비트 인 이유는 무엇입니까?


C ++에서는 부울 유형이 8 비트 길이 (내 시스템에서) 왜 부울 값을 보유하기에 충분합니까?

나는 그것이 성능상의 이유라고 생각했지만 레지스터가 32 또는 64 비트 너비 인 32 비트 또는 64 비트 시스템에서 성능 이점은 무엇입니까?

아니면 이러한 '역사적'이유 중 하나입니까?


모든 C ++ 데이터 유형은 주소 지정이 가능해야하기 때문입니다.

단일 비트에 대한 포인터를 어떻게 작성 하시겠습니까? 당신은 할 수 없습니다. 그러나 바이트에 대한 포인터를 만들 있습니다. 따라서 C ++의 부울은 일반적으로 바이트 크기입니다. (더 클 수도 있습니다. 구현에 달려 있습니다. 가장 중요한 것은 주소를 지정할 수 있어야하므로 C ++ 데이터 유형이 바이트보다 작을 수는 없습니다)


메모리는 바이트 주소를 지정할 수 있습니다. 메모리에서 읽은 바이트를 이동하거나 마스킹하지 않으면 단일 비트를 처리 할 수 ​​없습니다. 이것이 매우 큰 이유라고 생각합니다.


boolean유형은 일반적으로 어드레스 가능한 메모리의 최소 단위 이하 대상 기기 (즉, 일반적으로 8 비트 바이트)의이.

메모리에 대한 액세스는 항상 "청크"(여러 단어, 이는 하드웨어 수준 , 버스 트랜잭션 에서의 효율성을 위한 )입니다. 부울 비트는 대부분의 CPU 시스템에서 "단독"으로 처리 될 수 없습니다. 물론 일단 데이터가 레지스터에 포함되면 비트를 독립적으로 조작하는 특수 명령이 종종 있습니다.

이러한 이유로 "부울"기본 데이터 유형을 사용할 때 효율성을 높이기 위해 "비트 패킹" 기술을 사용하는 것이 일반적 입니다. enum2 코딩의 거듭 제곱을 갖는 (C에서)와 같은 기술 이 좋은 예입니다. 대부분의 언어에서 같은 종류의 속임수가 있습니다.

업데이트 : 훌륭한 토론 덕분 에 C ++의 정의 에 따라 주목을 sizeof(char)==1받았습니다 . 따라서 "부울"데이터 형식의 주소 지정은 주소 지정 가능한 메모리의 가장 작은 단위와 밀접한 관련이 있습니다 (내 요점을 강화).


주소를 지정할 수있는 가장 작은 메모리 양인 8 비트에 대한 답변이 맞습니다. 그러나 일부 언어 부울에 1 비트를 사용할 있습니다. Pascal 구현 세트를 비트 문자열로 기억하는 것 같습니다. 즉, 다음 세트의 경우 :

{1, 2, 5, 7}

이것을 메모리에 가지고있을 수 있습니다 :

01100101

물론 C / C ++에서 비슷한 것을 할 수 있습니다. (당신이 논리 값의 무리를 추적하는 경우, 그것은 이해,하지만 정말 상황에 따라 달라집니다.)


나는 이것이 오래되었다는 것을 알고 있지만 나는 2 센트를 던질 것이라고 생각했다.

부울 또는 데이터 형식을 1 비트로 제한하면 응용 프로그램에서 메모리가 손상 될 위험이 있습니다. 1 비트 길이의 메모리에서 오류 통계를 어떻게 처리합니까?

나는 면접에 갔고 프로그램 담당자가 나에게 말한 진술 중 하나는 "미사일 발사 신호를 보내면 무선을 통해 오프 비트에서 간단한 1 비트 만 보내면된다. 1 비트 전송은 매우 빠르다. 그 신호를 가능한 빨리해야합니다. "

글쎄, 개념과 비트, 바이트 및 오류 처리를 이해했는지 확인하는 테스트였습니다. 나쁜 사람이 1 비트 메시지를 보내는 것이 얼마나 쉬운가요? 또는 전송 중에 비트가 다른 방향으로 뒤집 히면 어떻게됩니까?


부울 플래그 (예 : Microchip MPU 용 CCS C 시리즈 컴파일러)를 비트 패킹하는 데 사용되는 int1 유형을 갖는 일부 임베디드 컴파일러. 이러한 변수의 설정, 지우기 및 테스트는 단일 명령어 비트 수준 명령어를 사용하지만 컴파일러는 다른 답변에 언급 된 이유로 인해 다른 작업 (예 : 변수의 주소 사용)을 허용하지 않습니다.

참고 URL : https://stackoverflow.com/questions/2064550/c-why-bool-is-8-bits-long

반응형