1. struct
Struct(구조체)는 구조체 멤버중 가장 큰 변수의 크기를값을 기준으로 잡고 기준값의 크기에 나머지 변수를 순서대로 차곡 차곡 배치하여 구조체의 전체 크기가 결정 된다. 아래의 예시 코드를 보자.
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) |
크기는 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) } |
공용체 멤버 중 가장 크기가 큰 long 형을 기준으로 8 bytes 크기를 사용하고 나머지 멤버들이 이 메모리 공간을 모두 공유 하게 된다. 즉, 13 bytes 도 아니고 16 bytes 도 아니고 8 bytes 가 되는거다.
Struct(구조체) vs Union(공용체) 메모리 사용 비교
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ (template, auto, decltype) 타입 추론 Universal reference (0) | 2022.11.14 |
---|---|
C++ 공용체(union) 개념과 통신에서의 사용 이유 (0) | 2022.11.10 |
C++ 함수 객체 (Functor) / () 연산자 오버로딩 (0) | 2022.11.08 |
C++ 클래스 접근제한자 관련 보충 내용 (0) | 2022.11.07 |
C++ 객체 이동 std::move (0) | 2022.11.03 |