Search

질문답변

질문답변

C의 byte padding에 관한 질문

조회 : 3,645회
20-04-03 13:02

본문

안녕하세요.

아래의 내용으로 byte padding을 테스트 해 봤습니다.

// 0 로 표기된 것은 해당 라인의 내용을 지우고 테스트 했다는 뜻이고, 그 외의 "// 숫자"는 해당 라인의 byte padding 이전의 byte 크기를 나타낸 것입니다. 

아래 크기가 88과 72가 나온 것이 이해되지 않네요.

도와 주세요.

감사합니다.


typedef struct {
char* publisher;       // 8
int pub_year; // 4
}Publisher; // 16
typedef struct
{
char title[30]; // 30 // 30    //30
char author[30];  // 30 // 30    //30
int price; // 4       // 4    // 0
char* temp; // 8       // 8    //8
Publisher pub; // 16    // 0 // 0
} TEXTBOOK; // 88? // 72?   // 72
printf("Publisher=%d, TEXTBOOK=%d\n", sizeof(Publisher), sizeof(TEXTBOOK));

댓글목록

TCPSchool님의 댓글

TCPSchool 작성일

안녕하세요~ 티씨피스쿨입니다~
회원님께서 질문하신 byte padding 관련 내용은 기본적인 원리를 이해하기 위함이며, 실제로 구조체 멤버가 메모리에 할당되는 방식은 사용하는 OS나 컴파일러 그리고 컴파일러 옵션에 따라 매우 다양하게 적용될 수 있습니다. 또한, 최신 컴파일러의 최적화 옵션은 구조체 멤버를 정렬하기 보다는 가급적 속도를 높이는 쪽으로 맞춰져 있는 경우도 많기에 이 자리에서 모두 알려드리기는 힘들 수 있습니다.

따라서 관련 내용을 참고하실 수 있는 블로그를 몇 군데 추천해 드리겠습니다.
감사합니다.

https://thrillfighter.tistory.com/383
https://mtding00.tistory.com/12
https://pangate.com/19