반응형
Struct의 size
이런 경우에는 8 + 4 + 2 = 14 bytes 일 거라고 예상하기 쉽지만
그 이유는 메모리 엑세스 패턴 때문에 컴파일러가 padding 패딩을 사이에 넣어주기 때문이다.
구조체 struct나 클래스 class의 경우에는 padding이 들어가게 되기 때문이다.
클래스/구조체 멤버 정렬 - padding _ 링크
Class의 size
: function은 class의 size와 관계 없다.
Cat 포인터를 저장하는 변수 catPtr를 하나 만들고 cat1의 주소를 넣어주고
catPtr 의 크기를 출력해보는 프로그램을 만들어보자.
포인터의 경우에는 타입과는 상관없이 항상 8 bytes를 갖는다. (64bit)
-> 그 이유는, 포인터는 격자무늬 메모리 구조에서 각각의 주소를 나타내는 것인데,
64bit 환경에서 주소를 가리키기 위해서 8 bytes의 크기가 필요하기 때문에 모든 포인터는 8 bytes의 크기를 갖는 것이다.
결론
1. 타입이 무엇이 되었든 Low level에서 각자의 사이즈에 맞추어서 실제 메모리를 차지하고 있다.
2. 포인터도 다른 변수와 마찬가지로 항상 8 bytes의 공간이 필요하다.
3. struct 구조체 class 클래스와 같이 추상적인 개념들도 그 내부의 멤버 변수들에 따라서 실제 메모리 공간을 차지한다.
반응형
'모던C++ > 메모리 구조 Memory Structure' 카테고리의 다른 글
7. 힙 스택 스태틱 Heap Stack Static - 언제 어떻게 사용해야 할까 (0) | 2022.07.06 |
---|---|
6. 힙 메모리 Heap Memory 에 대한 모든 것 (2) - 예제 + Memory Leak 메모리 릭 방지 (0) | 2022.07.01 |
5. 힙 메모리 Heap memory 에 대한 모든 것 - Heap vs Stack (0) | 2022.06.30 |
4. 스택 메모리 - 스택 프레임 Stack Frame, Call Stack, this (0) | 2022.06.16 |
2. 메모리 속 변수 타입 Variable Types - sizeof(), Array, Pointer, int... (0) | 2022.06.16 |
1. 메모리 속 변수들에 대한 설명 - Stack 스택 (0) | 2022.06.16 |