int, char, int byte가 이상해요..
겨레
질문 제목 : byte가 헷갈려요질문 요약 :byte가 헷갈려요질문 내용 : 바로 본론으로 들어가자면!
#include stdio.h
void main(void)
{
struct foo_t {
int x;
int y;
char c;
char c2;
};
struct foo_t data;
struct foo_t *ptr = &data, *ptr2;
ptr2 = ptr;
ptr2++;
printf(sizeof data is = %d\n, sizeof(data));사이즈가 왜 12인가요??4+4+1+1은 10이자나요 ㅜㅠ
printf(data의 첫 주소값은 %d\n, &data);
printf(data.x 첫 주소값은 %d\n, &data.x);
printf(ptr이 가르키는 주소값은 %d\n, ptr);
printf(ptr2가 가르키는 주소값은 %d\n, ptr2);
return;
}
위에와 다른 코드들은 동일하고구조체 선언만 아래처럼 바꿔주었을때요~
struct foo_t {
char c;
int x;
int y;
char c2;
};
printf(sizeof data is = %d\n, sizeof(data));사이즈가 왜 16인가요??
printf(data의 첫 주소값은 %d\n, &data);왜 위에처럼 data와 data.x첫 주소값이 같지않고 다른가요?
printf(data.x 첫 주소값은 %d\n, &data.x);
printf(ptr이 가르키는 주소값은 %d\n, ptr);
printf(ptr2가 가르키는 주소값은 %d\n, ptr2);빨간글씨부분을 중심으로 해서 전체적으로 설명해주시면 감사하겠습니다. ㅜㅠ
이부분은 제가 돌려봐도 잘이해가안되네요 ㅜㅠ
-
sin
alignment이라고 해서, 1byte로 끝부분이 끊기면 4byte단위로 정렬을 해주기 때문에 그렇습니다.
-
Hotpants
첫번째는 /4/4/1+1+(2)/ 로 (2)바이트는 비어있습니다.차지하고 있는 크기는 12바이트입니다.
두번째는 /1+(3)/4/4/1+(3)/로 (3+3=6)바이트는 비어있습니다.차지하고 있는 크기는 16바이트입니다.
포인터는 4바이트인 정수로 표현됩니다.