프로세스 메모리 구조는 이런 식으로, 스택과 같은 경우는 위쪽에서부터 촘촘하게 아랫방향으로 진행되고, 힙은 아래쪽에서 위 방향으로 채워져 올라가는데 힙 메모리의 특성상 중간중간에 비어 있을 수 있다. 프로그램의 실행 과정 중에서 새로운 공간을 할당받고, 이미 할당받은 메모리가 해제되면서 빈 공간이 생기기 때문이다. 앞선 챕터들에서 힙과 스택 메모리의 장단점과 특징, 그리고 그 차이점에 대해 알아보았다. 정리해보면, Stack 스택 메모리는 1) stack frame 스택 프레임 단위로 할당 해제가 된다. 2) 할당 해제의 위치는 항상 탑 위치에서부터 일어나게 된다. (위 프로세스 메모리 뷰 위쪽) Heap 힙 메모리는 1) 새로운 메모리 공간을 받기 위해 힙 공간 중간에 어느 파트가 비어 있는지 확인해야..
메모리
힙 메모리 사용 방법 1) C Style 2) C++ Style 3) Safer C++ Style 1. C스타일 (1)malloc 명령어 사용 (2) C style class Cat 컴파일: 된다. 그런데, 분명히 컨스트럭터와 디스트럭터를 생성해 놓았음에도 불구하고 "meow" "bye" 가 호출되지 않는다. *C 스타일(malloc) 의 힙 메모리 관련 명령어들은 그냥 사용하지 말 것. 2. C++ 스타일 new, delete 키워드 사용 방금 코드에서 malloc 부분을 new로, free 부분을 delete로 치환해 보자. //array의 경우 //int의 경우에는 3. Safer C++ style 위의 방식대로 할 경우에...만약에 if 프로그래밍을 하다가 delete 부분을 잊어버린다면? 즉, ..
필요 사전 지식 메모리 동적 확보, 배열의 동적인 확보 메모리 동적 확보, 배열의 동적인 확보 참고 nybot-house.tistory.com/9 변수와 스코프(지역변수와 전역변수) 02.14" data-og-description="변수의 종류 파악하기 지금까지 변수와 배열을 사용했던 곳은 main() 함수 안이거나 직접 만든 함수 안이었다.. nybot-house.tistory.com C++ 는 사용자가 메모리 관리를 직접 해 주어야 하는 Unmanaged Language이다. 메모리 관리에 실패하게 되면 Memory leak, Memory fragmentation 등의 문제가 일어날 수 있다. 힙 메모리를 정확하게 이해한다면 이런 문제들을 피해 프로그래밍을 할 수 있다. Stack VS Heap 비교..
Struct의 size 이런 경우에는 8 + 4 + 2 = 14 bytes 일 거라고 예상하기 쉽지만 그 이유는 메모리 엑세스 패턴 때문에 컴파일러가 padding 패딩을 사이에 넣어주기 때문이다. 구조체 struct나 클래스 class의 경우에는 padding이 들어가게 되기 때문이다. 클래스/구조체 멤버 정렬 - padding _ 링크 Class의 size : function은 class의 size와 관계 없다. Cat 포인터를 저장하는 변수 catPtr를 하나 만들고 cat1의 주소를 넣어주고 catPtr 의 크기를 출력해보는 프로그램을 만들어보자. 포인터의 경우에는 타입과는 상관없이 항상 8 bytes를 갖는다. (64bit) -> 그 이유는, 포인터는 격자무늬 메모리 구조에서 각각의 주소를 나타..