🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

구조체 패딩 관련 질문입니다

22.07.12 06:04 작성 조회수 189

0

  • - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
  • - 먼저 유사한 질문이 있었는지 검색해보세요.
  • - 서로 예의를 지키며 존중하는 문화를 만들어가요.
  • - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
struct Padding
{
char a;            //1
long long b;    //8
short c;          //2
int d;             //4
char e;           //1
long long f;     //8
char g;           //1
};

디폴트 패킹 값으로 설정되어있고
32bit 환경과 64bit 환경에서 둘다 테스트해봤습니다.
 
처음에 디폴트 패킹값이 8이라고 알고있어서
8byte 단위로 끊어서
c , d , e 변수가 하나의 8byte 단위로 들어갈거라고 생각해서 sizeof(Padding)이 40byte라고 생각했는데

결과는 48byte가 나왔습니다

그래서 메모리 뷰를 확인해 본 결과

0x000000837FB1F948  03 00 cc cc          ..??
0x000000837FB1F94C  04 00 00 00        ....
0x000000837FB1F950  05 cc cc cc          .???
0x000000837FB1F954  cc cc cc cc            ????


short c 랑 int d가 8byte 차지하고
char e  혼자 8byte를 차지하더라고요

왜 굳이 8byte단위로 처리 가능한데
short c / int d / char e 를 하나의 8byte로 처리하지 않고 오히려 4byte씩 끊어서 처리하는 느낌이 들었는데 
이런 현상에 대해서 궁금합니다

답변 1

답변을 작성해보세요.

0

short c, int d, char e가 8바이트 안에 들어갈 수는 있겠지만
그렇게 되면 int d가 4바이트 배수의 주소에 딱 들어가지 않게 됩니다.
조금 개념적으로 헷갈리긴 하지만 결과적으로 모든 변수들이 짤리지 않고
한 번에 빠르게 읽고 쓰게 데이터들이 배치되는 것이죠.
short c, char e, int d 이렇게 바꾸면 또 결과가 다를 거에요.

채널톡 아이콘