[C++] 구조체/클래스 크기
Updated:
개요
- 구조체/클래스 메모리 할당 규칙
- 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
-