csapp 문제 푸는 중인데


struct { char *a; short b; double c; char d; float e; char f; long g; int h; } rec;


각 필드들 offset 이랑 구조체 크기 구하는 거거든


난 이럴 줄 알았단 말이지


struct { char *a; // 0 short b; // 8 // 6 bytes padding double c; // 16 char d; // 24 float e; // 25 char f; // 29 // 2 bytes padding long g; // 32 int h; // 40 } rec; // Total 48 bytes


근데 답은 이러더라고


struct { char *a; // 0 short b; // 8 // 6 bytes padding double c; // 16 char d; // 24 // 3 bytes padding float e; // 28 char f; // 32 // 7 bytes padding long g; // 40 int h; // 48 } rec; // Total 56 bytes


d 랑 e 사이에 왜 4 바이트 alignment requirement 인지 모르겠다


전체 구조체의 alignment requirement 는 8 인 건 알거든


alignment requirement 가 보통 다른 필드들의 alignment 의 최소공배수로 구해진다고 아는데 아닌가?


그게 아니면 설마 앞에 필드를 기준으로 alignment 를 해야 하는 건가. 그러면 이해가 되는데