일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- dart 언어
- 플러터
- git
- 깃
- vim
- C# delegate
- Unity
- github
- HTML
- c#
- Python
- 포인터
- C++
- c# 추상 클래스
- gitlab
- Flutter
- c# 윈폼
- C언어 포인터
- 구조체
- 다트 언어
- Houdini
- Algorithm
- 유니티
- Data Structure
- c언어
- jupyter
- jupyter lab
- 도커
- c# winform
- docker
Archives
- Today
- Total
nomad-programmer
[Programming/C] 공용체 (union) 본문
공용체를 적재적소에 활용하면 메모리를 절약할 수 있다. 사용자 정의 자료형을 만드는 구조체와 문법 구조가 비슷한 공용체 문법이 있다.
공용체의 요소들은 할당된 메모리를 공유한다.
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;
}
동시에 사용하지 않는다는 조건만 만족한다면 몇 개의 변수를 사용하든 상관 없이 공용체로 해당 변수들을 묶어서 메모리를 절약할 수 있다.
'Programming > C' 카테고리의 다른 글
[Programming/C] 포인터를 이용한 문자열 리버스 (0) | 2020.06.17 |
---|---|
[Programming/C] 비트 단위 분리 (0) | 2020.06.16 |
[Programming/C] 콜백 함수 (0) | 2020.06.16 |
[Programming/C] 함수 포인터(Function Pointer) (0) | 2020.06.16 |
[Programming/C] fseek, ftell 함수 (0) | 2020.06.16 |
Comments