본문 바로가기

Study Memos/Windows Programming

HeapAlloc, HeapFree (Section 101)

참고> blog.naver.com/tipsware/220964497321

 

1. Windows 운영체제에서 동작하는 프로그램은 동적 메모리 할당을 위해 HeapAlloc, HeapFree 함수를 사용함

2. HeapAlloc 함수: Heap에서 동적으로 메모리를 할당할 수 있는 함수

3. HeapFree 함수: Heap에서 동적으로 할당된 메모리를 해제할 수 있는 함수

4. malloc vs HeapAlloc
  - malloc은 운영체제에 종속되어 있지 않기 때문에 소스의 독립성을 높일 수 있음.

    즉, Windows 환경이든 Linux 환경이든 소스 수정이 필요 없음.

  - HeapAlloc은 Windows 환경에 종속되어 있기 떄문에 Linux 환경에서는 사용하지 못함.
  - HeapAlloc은 Windows 운영체제가 제공하는 API이기 때문에 malloc보다 운영체제가 제공하는 다양한 옵션을

    추가적으로 사용 가능함.
  - HeapAlloc은 운영체제에 바로 전달되기 때문에 malloc보다 수행 속도가 더 빠름

5. Default Heap: 프로그램이 실행되었을 때 자동으로 생성되는 힙
   -> Default Heap의 핸들 값을 얻을 땐 GetProcessHeap()
   -> 추가적인 Heap이 필요할 경우 CreateHeap() 함수로 힙을 생성할 수 있음

6. 메모리 할당 옵션(dwFlags)
   -> HEAP_GENERATE_EXCEPTIONS: HeapAlloc() 함수가 메모리 할당에 실패했을 때 Exception을 발생시킬지 유무
   -> HEAP_NO_SERIALIZE: HeapAlloc을 호출하는 스레드들이 동시에 힙에 접근할 수 있도록 해줌. 
       싱글스레드 상황이거나 스레드의 메모리 할당 순서를 프로그래머가 직접 제어할 경우 이 옵션을 사용하면 되지만,
       멀티스레드 환경에서 아무 계획없이 이 옵션을 사용하면 스레드들이 힙에 동시에 접근하면서 오류가 발생함
       (멀티스레드 환경에서 잘 컨트롤할 자신 없으면 이 옵션은 건들지 말자.)
   -> HEAP_ZERO_MEMORY: 할당된 메모리 전체를 0으로 채움