Heap에 대한 생기초를 공부하면서 정리한 것.
1. 힙 오브젝트
모든 프로세스는 Default Heap(기본 힙) 공간을 가지고 있으며, 크기는 1MB이다.
프로세스는 Default Heap을 사용하면서 크기를 증가시키면서 사용할 수 있다.
그런데 멀티 스레드 환경에서 Heap은 모든 스레드에서 접근 가능한 자원이기 때문에, 여러 개의 Heap을 가지고 플래그를 통해 Heap의 속성을 제어할 필요가 생겨났다. 아래 함수들은 Default Heap 이외의 힙 오브젝트들을 생성, 삭제하는 함수이다.
- HANDLE HeapCreate(DWORD fdwOption, SIZE_T dwInitialSize, SIZE_T dwMaximumSize);
- BOOL HeapDestroy(HANDLE hHeap);
HeapCreate 함수에서 반환되는 HANDLE은 Heap을 지칭하기 위해 필요하다. Default Heap의 HANDLE을 얻기 위해서는 아래 함수를 이용하면 된다.
2. 메모리 할당 및 해제
메모리 할당/해제를 위해서는 아래 함수들을 이용한다.
- HANDLE HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes);
- hHeap: Heap의 handle.
- dwFlags: 플래그(생략)
- dwBytes: 할당 크기
- BOOL HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem);
- pvMem: HeapAlloc()에서 반환된 handle.
- HANDLE HeapReAlloc(HANDLE hHeap, DWORD fdwFlags, LPVOID lpMem, SIZE_T dwBytes);
이외에도..
- SIZE_T HeapSize(HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem)
- BOOL HeapValidate(HANLDE hHeap, DWORD dwFlags, LPCVOID lpMem)
참고로 C++에서 new(), delete() 함수를 이용할 때에도 Default Heap을 이용한다.
참고