C/C++ 비트 필드는 하드웨어 드라이버 및 이진 네트워크 전송에 많은 응용 프로그램이있는 것 같습니다. 그러나 C99 표준의이 따옴표에서 볼 수 있듯이 실제 바이너리 레이아웃은 구현에 따라 다르기 때문에 널리 사용되는 것은 아니며 일반적으로 사용하지 않는 것이 좋습니다. 6.7.2.1.10 - "구조 및 조합 지정자";Bitfields, 구현이 특별한 이유는 무엇입니까?
구현은 비트 필드를 보유 할만큼 충분히 큰 주소 지정 가능한 저장 장치를 할당 할 수 있습니다. 충분한 공간이 남아있는 경우, 구조 내의 다른 비트 필드 바로 뒤에 오는 비트 필드는 동일한 유닛의 인접한 비트로 패킹되어야합니다. 공간이 충분하지 않은 경우 적합하지 않은 비트 필드가 다음 유닛에 삽입되거나 인접한 유닛과 중첩되는지 여부는 구현에 따라 결정됩니다. 단위 내의 비트 필드 할당 순서 (상위에서 하위 또는 하위에서 상위)는 구현에 따라 정의됩니다. 주소 지정 저장 장치의 정렬은 지정되지 않습니다.
제 질문은 간단합니다. 왜위원회는 비트 필드를 특정 구현 특정 항목으로 남겨두기로 결정하여 컴파일러 구성으로 만들었는데, 이는 주로 메모리 사용량을 줄이기 위해 사용할 수 있습니다. 대부분의 경우 이진 레이아웃을 제공하고 무료로 사용할 수있었습니다. 개발자는 비트 - 바이올린 코드에서?
나는 몇 가지 이유를 생각할 수 있습니다. 또한 비트 필드를 부분적으로 하나의 바이트에 넣는 것은 성능에 미치는 영향이 거의 없기 때문에 컴파일러는 속도 또는 크기 최적화의 사용자 설정에 따라 컴파일러가 자유롭게 선택할 수 있습니다. –
바이트 당 비트 수는 8 일 필요가 없다는 사실도 분명합니다. –
@ Mr Lister : 필드가 다음 바이트에서 정렬되고 따라서 바이트 중간에서 시작하지 않도록하려면 0 크기 비트 필드가 지정됩니다. 맞습니까? - 이미 표준에 들어 있습니다. – Skeen