본문 바로가기
컴퓨터/C

[C언어][개발역량평가] Struct(구조체), Union(공용체) size(크기) 에대한 정리

by Luyin 2013. 8. 19.

1. Struct

Struct(구조체)는 구조체 멤버중 가장 큰 변수의 크기를값을 기준으로 잡고 기준값의 크기에 나머지 변수를 순서대로 차곡 차곡 배치하여 구조체의 전체 크기가 결정 된다. 아래의 예시 코드를 보자.

#include

typedef struct test{ int a; long c; char b; char d:1, //d:1의 의미는 char d를 1bit 의 크기로 계산하고 사용한다는 의미 e:1, f:1, g:2, i:1, k:1; long h; } test; int main(void) { test k; k.g=1; // printf("a:%d \n",k.g); printf("size : %d\n",sizeof(k)); return 0; }

구조체 형태 도식화 (long 은 64bit 운영체제에서 8byte 이다. 아래의 표는 64bit 기준)

int (4byte)

 

 

 

 

long (8byte)

Char(1)

Char(1)

 

 

 

 

 

 

Long (8byte)

 

test struct의 사이즈는 얼마일까요? 64bit 머신을 기준으로  32byte이다. (long 8byte)
의아하지 않나요? 보통은 int (4byte), char(1byte)이므로, 총 4+8+1+1+8 = 22byte 라고 여길텐데 말입니다.


2. Union

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

typedef union {

    char a;
    int b;
    long c;

} Aion

공용체 형태 도식화

Long (8 bytes) { char(1 byte), int(4 bytes) }

공용체 Aion의 크기는 얼마일까요? 공용체 멤버 중 가장 크기가 큰 long 형을 기준으로 8 bytes 크기를 사용하고 나머지 멤버들이 이 메모리 공간을 모두 공유 하게 됩니다. 즉, 13 bytes 도 아니고 16 bytes 도 아니고 8 bytes 가 되는 겁니다.


Struct(구조체) vs Union(공용체) 메모리 사용 비교