C-Language/Bit Fields
Bit Fields in C Language
Soul-Learner
2016. 11. 14. 21:08
C 언어의 비트 필드(Bit Fields)
메모리의 사용을 최소한으로 줄여야 하는 소형 임베디드 시스템에서 실행될 프로그램을 작성한다면 숫자 한개를 메모리에 저장하더라도 가급적 메모리를 최소한으로 차지하도록 신경을 써야 할 때가 있을 것이다. 예를 들어, 소형 마이크로 콘트롤러를 이용하여 LED에 점등/소등을 해야 한다면 ON/OFF 정보만 표현하면 되므로 0, 1 만 사용해도 된다. 그러나 char, short, int 형 정수 변수를 사용하여 0, 1을 저장해야 한다면 실제보다 훨씬 많은 메모리를 할당해야 하므로 비효율적이다.
C 언어에서는 Bit Fields 라는 방법으로 이러한 문제를 해결할 수 있다. 구조체와 거의 같은 형식으로 선언 및 사용할 수 있다
비트필드가 차지하는 메모리의 크기는 기본적으로 4바이트이며 비트필드를 구성하는 변수들의 총 비트 수가 32비트를 초과하면 다시 4바이트가 추가로 할당되어 8바이트가 되는 방식으로 메모리가 할당된다
비트 필드 선언 형식
struct [ 비트필드 태그]
{
한개 이상의 비트필드 선언 ;
} [ 한개 이상의 변수 이름] ;
비트필드를 선언할 때 구조체 안에 선언할 수 있는 자료형은 int , undigned int, signed int 중 한가지이어야 한다
구조체 안에 비트필드를 선언할 때의 형식
자료형 필드명 : 비트의 수 ;
비트필드 변수 선언의 예
unsigned int led1 : 1 ;
#include <stdio.h> struct STATUS { unsigned int led1 : 1; unsigned int led2 : 1; unsigned int led3 : 1; unsigned int led4 : 1; }; void printBit(struct STATUS *status); int main() { struct STATUS ledStatus; ledStatus.led1 = 0; ledStatus.led2 = 1; ledStatus.led3 = 1; ledStatus.led4 = 0; // 비트필드의 메모리 할당 크기는 기본이 4바이트이고 변수가 4바이트를 초과하는 경우 4바이트가 추가된다 printf("비트필드의 메모리 할당 크기=%d \n", sizeof(ledStatus)); // 4 printBit(&ledStatus); return 0; } void printBit(struct STATUS *status) { printf("led1=%d, led2=%d, led3=%d, led4=%d \n", status->led1, status->led2, status->led3, status->led4); }