본문 바로가기

C++

bitfield 사용 시 유의할 점

[1. 개요]

메모리를 bit 단위로 제어할 필요가 있을 때 사용하는 bitfield 에 대해서 사용 시 유의할 점.

  1. bitfield 멤버에 대해서 주소를 확인 할 수 없다. (주소연산 불가)
  2. 비트 필드가 저장되는 순서 (MSB→LSB 등)는 플랫폼/컴파일러 의존적

[2. 비트 필드가 저장되는 순서]

Little-endian arch 에 g++ 컴파일러 기준으로 아래 예제를 실행하면,

#include <iostream>
#include <cstring>

struct Mystruct {
    unsigned char a : 4;
    unsigned char b : 4;
};

int main()
{
    unsigned char c = 0x8f;
    Mystruct obj;

    memcpy(&obj, &c, sizeof(c));

    std::cout << std::hex << "0x" << int(c) << std::endl;
    std::cout << std::hex << "0x" << int(obj.a) << std::endl;
    std::cout << std::hex << "0x" << int(obj.b) << std::endl;

    return 0;
}
출력
0x8f
0xf
0x8

 

즉, 변수 c 의 하위 4비트가 구조체 상 첫번째 변수에 저장되고,

상위 4bit 가 그 다음 변수에 저장 된다.

아래와 같은 구조.

 

'C++' 카테고리의 다른 글

std::bind  (0) 2025.04.28
OS 별 select() 함수 사용법  (0) 2025.04.24
구조체 대입 연산  (0) 2025.04.15
Segmentation fault 사례4  (0) 2025.04.14
Segmentation fault 사례3  (0) 2025.04.14