Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-17 00:00
관리 메뉴

nomad-programmer

[Programming/C] 공용체 (union) 본문

Programming/C

[Programming/C] 공용체 (union)

scii 2020. 6. 16. 19:55

공용체를 적재적소에 활용하면 메모리를 절약할 수 있다. 사용자 정의 자료형을 만드는 구조체와 문법 구조가 비슷한 공용체 문법이 있다.

공용체의 요소들은 할당된 메모리를 공유한다.

union SharedData {
    char c_data;
    short int s_data;
    int i_data;
};

공용체를 구성하는 각 요소들은 서로 같은 메모리를 공유하는 형태로 된다. SharedData 공용체는 총 4바이트를 사용한다.

// 리틀 엔디안 방식이라고 가정
union SharedData tmp;
tmp.i_data = 0x12345678;

위와 같이 값을 대입하면 c_data는 0x78, s_data는 0x78 0x56, i_data는 0x78 0x56 0x34 0x12 가 들어간다.

#pragma warning(disable: 4996)

#include <stdio.h>

union SharedType {
    int i_data;
    float f_data;
};

struct MyData {
    char type;
    union SharedType data;
};


int main(void) {
    struct MyData a, b;
    a.type = 0;
    a.data.i_data = 100;

    b.type = 1;
    b.data.f_data = 3.14f;

    return 0;
}

 동시에 사용하지 않는다는 조건만 만족한다면 몇 개의 변수를 사용하든 상관 없이 공용체로 해당 변수들을 묶어서 메모리를 절약할 수 있다.

Comments