-
구조체 크기!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