구조체의 메모리 크기는 programa push? 뭐 이런 지시자 없이 쓰면 맴버 메모리 단위는 1, 2, 4, 8의 단위만 사용하잖아?
여기서 단위의 기준은 맴버 중 메모리 크기가 가장 큰 단위 기준으로 알고 있는데
그럼 만약 구조체 맴버에 구조체 변수가 있고
이 구조체 변수가 8byte를 넘어서는 구조체라면 구조체 기준 단위는 무조건 8byte로 잡힘?
구조체를 아래와 같이 잡아서 sizeof로 메모리 크기 출력하니까
각각 24, 40이 나오더라고... 40이 나올려면 구조체 맴버의 크기 단위가 8byte가 되는 방법밖에 없는데 말야...
struct test4 {
int a;
char b;
double c;
double d;
};
struct test9 {
char a;
int b;
int c;
struct test4 s_a;
};
7개의 댓글
무분별한 사용은 차단될 수 있습니다.
HIGH SIERRA
64비트 컴퓨터면 8byte 배수로 잡힌다. 32비트 컴퓨터면 4byte 배수로 잡힌다.
그리고 변수 순서 다르게하면 용량 달라질 수 있음 패딩비트가 어디생기느냐에 따라 다름
기준 단위가 무조건 8byte는 아님
+) 뇌피셜임
Tbps
지금 이것저것 쳐보니 니말이 맞는듯
visual studio 2017쓰고있는데 윈10 64비트라 워드가 8byte로 잡혀서 그런지 int하나 char하나로 구조체 구성하니 무조건 8byte로 나오네
화울
그 경우에는 이렇게 생각이 든다.
test4 구조체의 경우
int a, char b; 8바이트 3바이트 남겠고
double c;
double d;
해서 24가 되겠지.
그리고 아래 test9은
char a; int b; 해서 8바이트
int c; 8바이트
test4 24바이트 해서
총 40이 나오는게 아닌가 싶음.
각 변수들 주소값 찍어봐라. ㅇㅇ
나도 뇌피셜
7ebf0a9aᅟᅟᅟᅟ
PC구조랑 컴파일러에 따라 다름.
Tbps
운영체제는 윈10 pro 64bit
7ebf0a9aᅟᅟᅟᅟ
차고보