LISTORY

[윈도우즈 시스템 프로그래밍] 힙 컨트롤 본문

IT/윈도우 프로그래밍

[윈도우즈 시스템 프로그래밍] 힙 컨트롤

LiStoryTeller 2018. 11. 11. 01:34


뇌를 자극하는 윈도우즈 시스템 프로그래밍 책 관련 유투브 강의 정리이다.


오늘 정리할 내용은 메모리 관리 부분이다.


YouTube 주소 : 힙 컨트롤



힙(Heap) 컨트롤


가상 메모리 공간을 commit, reserve, free 상태로 둘 수 있었다.


언뜻보면 이를 heap으로 볼 수도 있다.



⊙ 디폴트 힙(Default Heap) & Dynamic Heap



홍길동과 최대수가 다음과 같은 비디오 목록을 빌렸다.


보통 이럴 때, List 자료형을 많이 사용한다. 


근데 List 자료형은 자료를 한번에 지울 수 없고, 각각을 일일이 지워주어야 하는 특징을 가지고 있다. 


왜냐면 하나의 Heap안에 홍길동과 최대수를 위한 데이터가 같이 존재하기 때문이다.



이제까지 우리가 알던 heap을 default heap이라 한다. 즉, 윈도우즈가 기본적으로 제공해주는 힙이다.


윈도우즈에선 디폴트 힙 이와에 힙(Dynamic Heap)을 더 만들 수 있게 허용해준다.


그것이 바로 힙 컨트롤이다.


사진을 보면 홍길동을 위한 heap과 최대수를 위한 heap을 만들었다.


이럴 경우, 최대수가 탈퇴했을 때, 힙B만 지워주면 된다.


가상메모리 컨트롤은 예약이라는 관점이 타겟이었다. 메모리를 아껴보겠다라는 측면이다.


다이너믹 힙은 메모리를 아껴보겠다 보다는 분리, 즉 관리하겠다는 측면이 크다.



4기가의 메모리공간이 있다. 일부는 데이터 영역, 일부는 힙, 나머지는 내버려 둔다 치면


이 나머지 공간에 다이너믹 힙을 만들 수 있는 것이다.


근데 가상메모리 할때, 일부 가상메모리를 할당 받고 할당받은 메모리의 주소를 받아서 그 공간을 COMMIT으로 두냐 RESERVE로 두냐 등으로 썼다. 


그렇다면이 공간은 어떤 공간으로 봐야할까?


무엇이든 상관없다. 하지만 힙이라 하는 이유는 힙은 런타임에 결정된다는 기준이 있다.


가상메모리도 런타임시 할당받으므로 이 메모리도 힙으로 볼 수 있다는 것이 저자의 주장이다.



⊙ Dynamic Heap의 이점


● 메모리 단편화 해소

프로그램의 로컬리티가 낮아지는 문제점 발생


● 동기화 문제에서 자유(할당에 대한 동기화)

쓰레드 별로 힙을 생성할 수 있다.



⊙ Dynamic Heap 생성 및 할당


● 힙의 생성 및 소멸

HeapCreate: 힙의 생성

HeapDestroy : 힙의 소멸


● 생성된 힙 내의 메모리 할당 및 해제

HeapAlloc : 힙 내에 메모리 할당

HeapFree: 힙 내에 메모리 반환





Comments