MyStruct의 구조체 사이즈는 몇일까?
int형은 4byte, char형은 1byte, short형은 2byte여서
총 7byte라고 생각하는가?
정답은 8byte다.
왜 그럴까요?
구조체는 구조체 변수들 중에 제일 큰 사이즈의 자료형을 기준으로 메모리가 늘어난다.
int형이 제일 큰 사이즈이므로 4byte 단위로 메모리가 늘어난다.
메모리를 그림으로 표현하자
c와 s가 추가됨에 따라 3byte가 아닌 제일 큰 사이즈인 4byte로 늘어난 것을 볼 수 있다.
아래와 같을 경우는 어떨까?
제일 큰 사이즈는 int형인 4byte이다.
그럼 4바이트씩 늘어나면 구조체의 크기는 몇일까?
아래 사진과 같이 할당돼서 사이즈가 12byte라고 생각하는가?
정답은 16byte다.
왜?
아래와 같이 할당되기 때문이다. 1byte의 c가 할당되고 4byte의 i2가 할당될 때 바로 옆에다 할당되지 않는다.
이렇게 되면 사이에 안 쓰는 메모리가 있으므로 메모리 낭비라고 할 수 있다.
그럼 메모리 낭비를 하지 않기 위해 어떤 방법을 이용해야 할까?
사이즈가 큰 자료형부터 위에다가 순서대로 선언해줘서 메모리를 아끼자.
'언어 > C++' 카테고리의 다른 글
C++ 문자열 리터럴이 어느 메모리에 저장될까? 데이터영역? 코드영역? (4) | 2021.01.15 |
---|---|
C++ else if문은 최대 몇개까지 될까? (0) | 2021.01.14 |
C++ 두 변수를 바꾸기 위한 여러가지 방법. (임시 변수 이용, 수학적 사고 이용, xor 비트 연산자 이용) (0) | 2021.01.04 |
C++ 디폴트 파라미터의 내부 동작 (0) | 2020.12.24 |
C++ 함수 호출 시 호출 순서 (호출 관례) (0) | 2020.12.18 |