공부중

[C/C++] 구조체의 크기에 관해서.. 본문

Programing/C, C++

[C/C++] 구조체의 크기에 관해서..

곤란 2017. 7. 7. 15:44
반응형


퇴사후 휴식을 하고 잊어버린 C++을 ... 다시 공부하려고 하는데(진짜 다 잊어버려서 내가 당황스럽다..)


허리가 너무 아파서 겨우겨우 허리 잡으며 하나하나 정리라도 하면서 잊어버린거 혹은 그냥 생각나는대로 뭐라도 옮겨 적으려고 한다 -_-..


블로그 API도 종료되서 매우매우 캡쳐 뜨기도 귀찮기는 하지만.....



이번에 적을것은 구조체 선언시 문제(?)가 될 수 있는 것이다.


소스코드는 아래와 같다.

#include <iostream>

struct MyStruct1 { int a; char b; double c; short d; }; struct MyStruct2 { char a; short b; int c; double d; }; struct MyStruct3 { }; int main() { MyStruct1 s1; MyStruct2 s2; MyStruct3 s3; std::cout << sizeof(s1) << std::endl; std::cout << sizeof(s2) << std::endl; std::cout << sizeof(s3) << std::endl; return 0; }


결과 


내가 예상했던 결과는 


20

16

1


이었는데...

24

16

1


이렇게 나와 버렸다.


먼저 나는 4byte씩 공간을 잡는다는 생각으로.

위의 코드에서 MyStruct1을 보면.


struct MyStruct1 { int a; //4 ■ ■ ■ ■ char b; //4 ■ □ □ □ double c; //8 ■ ■ ■ ■ ■ ■ ■ ■ short d; //4 ■ ■ □ □ };


위의 주석과 같이 4+4+8+4 해서 20byte를 먹는줄 알았는데..

double인 8byte가 있어서 기준이 되는 크기가 4byte가 아닌 8byte가 되어버렸다.



struct MyStruct1
{
	int a;		//4	■ ■ ■ ■		// ■ ■ ■ ■
	char b;		//4	■ □ □ □		// ■ ■ ■ ■, ■ □ □ □
	double c;	//8	■ ■ ■ ■ ■ ■ ■ ■	// ■ ■ ■ ■, ■ □ □ □, ■ ■ ■ ■, ■ ■ ■ ■ 
	short d;	//4	■ ■ □ □	// ■ ■ ■ ■, ■ □ □ □, ■ ■ ■ ■, ■ ■ ■ ■, ■ ■ □ □, □ □ □ □
};


길게 표현되다보니 줄이 길어졌는데

저렇게 공간을 잡게 되어서 24byte가 나오게 되었다.


두번째 구조체인 MyStruct2는 아래와 같이...

struct MyStruct2
{
	char a;		//1 ■ □ □ □
	short b;	//2 ■ ■ □ □
	int c;		//4 ■ ■ ■ ■
	double d;	//8 ■ ■ ■ ■ ■ ■ ■ ■
};


첫번째와 두번째로 선언한 char와 short가 총 3byte이므로 4byte한 공간에 들어가게 되고 int c는 4byte이므로

a,b,c는 총 7byte를 잡아먹는다. d가 double형이므로 8byte가 되어서


8byte 2개의 공간을 잡게되어서 실질적으로는 7+8 byte이지만

공간은 8+8 byte인 16byte로 잡게 되었다.



내가 이런것도 잊어버리다니...ㅠㅠ


반응형