[1. 개요]
메모리를 bit 단위로 제어할 필요가 있을 때 사용하는 bitfield 에 대해서 사용 시 유의할 점.
- bitfield 멤버에 대해서 주소를 확인 할 수 없다. (주소연산 불가)
- 비트 필드가 저장되는 순서 (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 |