1. struct { char aa[10]; int bb; char cc[10]; } REQ_MSG; 2. int dd;
1번과 같은 구조체에서 sizeof(REQ_MSG) 출력하면 28이 나오는데 왜 그렇죠? 24 아닌가요?
2번과 같이 선언하고 sizeof(dd) 하면 4 가 나오거든요,,,,
허접질문이지만 고수님들의 답변 부탁드립니다....
'구조체 and 패딩' 정도로 검색해보세요.
---- Let's shut up and code.
4바이트 align때문에 char aa[10]과 char cc[10]뒤에 2바이트씩 padding이 들어가서 4바이트가 더 생기는거죠.
struct REQ_MSG msg; printf("the offset of bb = 0x%x",&msg.bb-&msg);
만일, gcc를 사용하신다면 아래 코드와 같이 해 보세요. 원하시는 것처럼 될거에요. 하지만, packed는 다른 컴파일러에서는 먹히지 않습니다.
struct { char aa[10]; int bb; char cc[10]; } REQ_MSG __attribute__ ((packed));
char aa[10] 과 char cc[10] 이 4byte alignment에 맞지 않기 때문에 2바이트씩 패딩됩니다. 따라서 24+2+2 = 28.
ps. 이것도 FAQ이지요... :-P
'구조체 and 패딩' 정도로 검색해보세요.
'구조체 and 패딩' 정도로 검색해보세요.
----
Let's shut up and code.
4바이트 align때문에 char aa[10]과 char cc[10]뒤에
4바이트 align때문에 char aa[10]과 char cc[10]뒤에 2바이트씩 padding이 들어가서 4바이트가 더 생기는거죠.
struct REQ_MSG msg; printf("the offset of bb = 0x%x",&msg.bb-&msg);해 보세요. 0x0a이 출력되지 않고 0xc가 출력될거에요.
만일, gcc를 사용하신다면 아래 코드와 같이 해 보세요. 원하시는 것처럼 될거에요. 하지만, packed는 다른 컴파일러에서는 먹히지 않습니다.
struct { char aa[10]; int bb; char cc[10]; } REQ_MSG __attribute__ ((packed));char aa[10] 과 char cc[10] 이 4byte alignm
char aa[10] 과 char cc[10] 이 4byte alignment에 맞지 않기 때문에 2바이트씩 패딩됩니다. 따라서 24+2+2 = 28.
ps.
이것도 FAQ이지요... :-P