본문 바로가기

C

[11] 공용체

728x90

공용체 형(union)

구조체 형 선언과 같지만 struct대신에 union을 사용합니다.

 

 

공용체 멤버의 주소

struct의 멤버가 각각 메모리를 차지하는 것과 다르게 공용체는 모든 멤버가 합쳐져 하나의 메모릴 주소를 공유합니다.

멤버에 각각 대입하려고 하면 "값이 너무 많다"는 오류가 발생합니다.

struct 멤버의 각 주소값

 

union 멤버의 각 주소값

코드를 보면 알 수 있듯이 struct의 멤버들은 모두 다른 주소를 가지고 있는 반면, union은 다른 멤버지만 같은 주소값을 가진다는 것을 알 수 있습니다.

 

 

공용체는 어디에 쓰일까요?

kldp.org/node/105301

 

[해결] union을 왜 쓰나요? | KLDP

조금 어이없는 질문 같긴 합니다만.. 커널소스를 요새 보고 있는데 생각보다 많은 union이 사용되고 있더군요. 교과서적으로 배우는 union의 이점은 제 기억으론 메모리를 낭비하지 않을수 있다는

kldp.org

유니온을 왜 쓰는가에 대한 예시와 설명 등은 계속 알아보겠지만

현재 가장 왜 쓰는가에 대해 수긍이 되는 부분은 다음과 같습니다.

union을 사용하면 메모리를 줄일 수 있다.

union은 서로 다른 타입들을 묶어 하나로 잡고, struct는 int, char, double등을 각각 메모리를 잡는다고 합니다.

멤버 전체의 합만큼의 메모리를 항상 리니어하게 잡습니다.

여기서 부터는 저의 생각인데 앞서 배웠던 것처럼 struct는 메모리를 잡을 때 패딩을 해서 잡기 때문에 최대 크기 타입의 메모리를 잡는 반면 union은 전부 합친 것을 하나의 메모리로 잡기 때문에 메모리를 절약할 수 있는 것이 아닌가 생각됩니다.

 

공용체와 구조체의 크기는 다를까요?

공용체로 선언

 

구조체로 선언

앞서 설명했듯이 같은 멤버라도 공용체로 선언하면 필요한 메모리의 크기가 줄어듭니다.

728x90

'C' 카테고리의 다른 글

[13] 마치며...  (0) 2021.04.27
[12] 열거형(enum)  (0) 2021.04.27
[10] 구조체 응용  (0) 2021.04.26
[9] 구조체 표기방법과 크기  (0) 2021.04.25
[8] 구조체  (0) 2021.04.24