내용 보기

작성자

관리자 (IP : 106.247.248.10)

날짜

2022-12-28 09:49

제목

[기타] [스크랩] 구조체(Struct)와 공용체(Union)의 차이


공용체는 구조체와는 달리 메모리를 '공유'한다.


 간단히 말해서

 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이다.


 

int (4byte)

 

 

long (8byte)

Char(1)

Char(1)

 

 

 

 

 

 

Long (8byte)




 반면 Union(공용체)의 크기는 공용체 멤버 변수 중 가장 큰 크기의 값을 하나 할당하고 모든 멤버가 그 메모리를 공유하게 된다.


 예를 들어 공용체 멤버 변수로 long, int, char를 둘 씩 선언할 경우

 그 중에서 가장 큰 long의 8바이트를 멤버 변수 전체가 공유해 총 크기가 8Byte가 된다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* 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
};
cs


출처1

https://blog.naver.com/ratoa/220658695667

출처2