-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
구조체 패딩 관련 질문입니다
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 단위로 끊어서
8byte 단위로 끊어서
c , d , e 변수가 하나의 8byte 단위로 들어갈거라고 생각해서 sizeof(Padding)이 40byte라고 생각했는데
결과는 48byte가 나왔습니다
그래서 메모리 뷰를 확인해 본 결과
결과는 48byte가 나왔습니다
그래서 메모리 뷰를 확인해 본 결과
0x000000837FB1F948 03 00 cc cc ..??
0x000000837FB1F94C 04 00 00 00 ....
0x000000837FB1F950 05 cc cc cc .???
0x000000837FB1F954 cc 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씩 끊어서 처리하는 느낌이 들었는데
이런 현상에 대해서 궁금합니다
char e 혼자 8byte를 차지하더라고요
왜 굳이 8byte단위로 처리 가능한데
short c / int d / char e 를 하나의 8byte로 처리하지 않고 오히려 4byte씩 끊어서 처리하는 느낌이 들었는데
이런 현상에 대해서 궁금합니다
답변을 작성해보세요.
0
Rookiss
지식공유자2022.08.30
short c, int d, char e가 8바이트 안에 들어갈 수는 있겠지만
그렇게 되면 int d가 4바이트 배수의 주소에 딱 들어가지 않게 됩니다.
조금 개념적으로 헷갈리긴 하지만 결과적으로 모든 변수들이 짤리지 않고
한 번에 빠르게 읽고 쓰게 데이터들이 배치되는 것이죠.
short c, char e, int d 이렇게 바꾸면 또 결과가 다를 거에요.
답변 1