개요
- 구조체/클래스 메모리 할당 규칙
- 4의 배수 바이트 단위로 할당
- 선언 순서대로 할당
- 멤버 변수 중 가장 큰 멤버 변수 크기의 영향을 받음
- 가장 큰 멤버 변수 크기가 8바이트라 가정
- 맨처음 8바이트가 할당되고 다 할당될 때까지 멤버 변수 선언 순서대로 할당
- 다 할당되면 다시 8바이트를 할당하여 반복
- 크기가 작은 순서로 멤버 변수를 선언하는 것이 메모리 공간 절약에 유리
예제
- 코드
-
#include <iostream>
using namespace std;
class A {
int i;
};
class B {
char c;
};
class C {
double d;
};
class D {
int i;
char c;
};
class E {
char c;
int i;
};
class F {
int i;
char c1;
char c2;
};
class G {
char c1;
char c2;
int i;
};
class H {
char b;
int i;
char c;
};
class I {
int i;
char c;
double d;
};
class J {
double d;
int i;
char c;
};
class K {
int i;
double d;
char c;
};
class L {
int i1;
int i2;
double d;
};
class M {
int i1;
int i2;
int i3;
double d;
};
class N {
int i1;
int i2;
int i3;
int i4;
double d;
};
int main() {
cout << "A : " << sizeof(A) << endl;
cout << "B : " << sizeof(B) << endl;
cout << "C : " << sizeof(C) << endl;
cout << endl;
cout << "D : " << sizeof(D) << endl;
cout << "E : " << sizeof(E) << endl;
cout << endl;
cout << "F : " << sizeof(F) << endl;
cout << "G : " << sizeof(G) << endl;
cout << "H : " << sizeof(H) << endl;
cout << endl;
cout << "I : " << sizeof(I) << endl;
cout << "J : " << sizeof(J) << endl;
cout << "K : " << sizeof(K) << endl;
cout << endl;
cout << "L : " << sizeof(L) << endl;
cout << "M : " << sizeof(M) << endl;
cout << "N : " << sizeof(N) << endl;
}
- 실행 결과
-
A : 4
B : 1
C : 8
D : 8
E : 8
F : 8
G : 8
H : 12
I : 16
J : 16
K : 24
L : 16
M : 24
N : 24