ABOUT ME

-

  • 구조체 크기!
    Programming/C++ 2020. 6. 8. 17:44

    안녕하세요. Teemol입니다.

    오늘은 C++의 Struct의 크기가 정해지는 방식에 대해서 알아보도록 하겠습니다.

     

    예제 1

    struct Temp {
    
    };

    위의 경우 사이즈가 "1"입니다.

     

    예제 2

    struct Temp2 {
    	char c;
    };

    위의 경우 사이즈가 "1"입니다.

     

    예제 3

    struct Temp3 {
    	int i;
    };

    위의 경우 사이즈가 "4"입니다.

     

    예제 4

    struct Temp4 {
    	char c;
    	int i;
    };

    위의 경우 사이즈가 "8"입니다.

     

    예제 5

    struct Temp5 {
    	double d;
    	char c;
    	int i;
    };

    위의 경우 사이즈가 "16"입니다.

     

    예제 6

    struct Temp6 {
    	char c;
    	double d;
    	int i;
    };

    위의 경우 사이즈가 "24"입니다.

     

    예제 7

    struct Temp7 {
    	char c;
    	double d;
    	int i;
    	int i2;
    };

    위의 경우 사이즈가 "24"입니다.

     

    예제 8

    struct Temp8 {
    	int aaa;
    	char c[9];
    	double d;
    	char c2[1];
    };

    위의 경우 사이즈가 "32"입니다.

     

     

    예제 1~8과 같이 구조체 크기가 멤버 변수의 크기들을 더한 값인 경우도 있고 아닌 경우도 있습니다.

     

    그 이유는 멤버 변수의 타입 크기 중 제일 큰 사이즈를 가진 타입을 기준으로 메모리를 할당하기 때문입니다.

     

    예제 4를 보면

    struct Temp4 {
    	char c;
    	int i;
    };

    위와 같이 구성되는데

    char = 1byte, int = 4byte로 int가 크기 때문에 메모리에 할당될 때 4byte 단위로 됩니다.

    그래서 char이 1byte를 채우고 뒤에 3byte는 패딩이 들어가고, 다시 int 4byte 값을 저장하게 되어 8byte가 됩니다.

     

    Visualvisual studio 2019에서 기본적으로 처리되는 방식이었습니다.

     

    위 내용은 개발 환경이나 설정에 따라서 바뀔 수 있습니다!

     

    위의 내용을 알아두면 구조체를 바이트 단위로 처리할 때 유용하게 사용할 수 있습니다.

     

    감사합니다.

    'Programming > C++' 카테고리의 다른 글

    파이썬을 사용해보자!  (0) 2020.04.04
    [MFC] CString -> string 변환  (0) 2020.01.31
    예외 처리를 해보자  (0) 2019.12.16
    Dumpbin을 사용해보자! [Dependents, Headers]  (0) 2019.09.24

    댓글

Designed by Tistory.