Updated:

1 minute read

개요

  • 구조체/클래스 메모리 할당 규칙
    • 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