대충 sizeof 가지고 놀고 있다가 궁금한거 물어 봅니다
class test
{
char a;
int ab;
char b;
};
이런 식으로 쎃을때 sizeof로 크기를 구하면 12가 나오더라구요. 그이유는 대충알거 같은데
class test
{
char a;
char b;
int ab;
};
이렇게 쎃을때는 크기가 8이 나오더라구요... 아무리 생각해도 그 이유를 잘 모르겠습니다
대충 sizeof 가지고 놀고 있다가 궁금한거 물어 봅니다
class test
{
char a;
int ab;
char b;
};
이런 식으로 쎃을때 sizeof로 크기를 구하면 12가 나오더라구요. 그이유는 대충알거 같은데
class test
{
char a;
char b;
int ab;
};
이렇게 쎃을때는 크기가 8이 나오더라구요... 아무리 생각해도 그 이유를 잘 모르겠습니다
padding이라고 함 구조체 사이즈를 자료형에 딱 맞게 하면 정렬이 뒤죽박죽 되어서 처리 성능이 낮아지기 때문에 아키텍처, 운영체제에 따라 padding을 삽입해서 성능 개선함 가끔 구조체를 pack으로 감싸는 코드 보일 때가 있는 데 이런 padding 없이 정확한 크기의 구조체를 만들기 위함임
컴파일러 최적화임
https://en.wikipedia.org/wiki/Data_structure_alignment
위에껀 a 놓고 남은 3바이트를 못 쓰는데, 아래에선 a 놓고 남은 공간에 b 넣을 수 있으니까 4바이트 2칸으로 끝나는거
4바이트 padding - dc App
나는 alignment라고 배웠는데 일단 가장 큰 자료형 기준으로 각 변수들이 정렬됨 근데 첫번째껀 이제 char 1바이트에 얼라인먼트 3바이트 int 4바이트 다시 char 포함한 4바이트가 되서 12인데 두번째껀 이제 첫번째 정렬되는 4바이트 공간에 char 2개를 넣을 수 있으니까 8이 되는거임
통신할 때 그런 문제 때문에 class, struct 를 통째로 패킷으로 보내지 못함. malloc 잡아서 char, char, int 순서대로 넣어줘야 함.
유식하게 말하자면.. 시리얼라이즈