생활
C언어 프로그래밍에서 유니온에 대해 질문드립니다.
안녕하세요.
C언어 프로그래밍에서 유니온, 즉 공용체에 대해 질문드립니다.
구조체와 다른 것으로 알고 있는데, 어떻게 다른지 비교해서 알려주실 수 있나요?
1개의 답변이 있어요!
공용체는 구조체와는 달리 메모리를 '공유'합니다.
간단히 말해서
struct의 경우 각 멤버들의 메모리 시작 주소가 다르지만,
union의 경우 각 멤버들의 시작 주소가 모두 동일합니다.
Struct(구조체)는 구조체 멤버 중 가장 큰 변수의 크기 값을 기준으로 잡고 기준 값의 크기에 나머지 변수를 순서대로 배치하여 구조체의 전체 크기가 결정됩니다.
예를 들어 구조체 멤버 변수로 long(8Byte), char(1Byte)를 둘 씩, int(4Byte)를 하나 선언할 경우
단순히 생각하면 구조체의 크기는 long(8) + long(8) + int(4) + char(1) + char(1) = 22Byte이지만,
실제로는 long(8) + long(8) + int2(8) + char2(8) = 32Byte입니다.
반면 Union(공용체)의 크기는 공용체 멤버 변수 중 가장 큰 크기의 값을 하나 할당하고 모든 멤버가 그 메모리를 공유하게 됩니다.
예를 들어 공용체 멤버 변수로 long, int, char를 둘 씩 선언할 경우
그 중에서 가장 큰 long의 8바이트를 멤버 변수 전체가 공유해 총 크기가 8Byte가 됩니다.
/* struct는 멤버 변수 중 가장 byte가 높은
long에 할당된 8byte를 기준으로 구조체의 전체 크기가 결정된다.*/
struct structbyte
{
long a, b; // 8byte
int c, d; // 4byte
char e, f; // 1byte
};
/* union은 멤버 변수 중 가장 byte가 높은
long에 할당된 8byte를 a~f 변수들이 모두 공유해 사용한다.*/
union unionbyte
{
long a, b; // 8byte
int c, d; // 4byte
char e, f; // 1byte
};