참고> 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으로 채움
'Study Memos > Windows Programming' 카테고리의 다른 글
윈도우 인스턴스 추가 메모리 (Section 103) (0) | 2020.12.14 |
---|---|
GetLastError 함수 (Section 102) (0) | 2020.12.14 |
FindWindow 함수 (Section 100) (0) | 2020.12.14 |
DrawText 사용하기 (Section 99) (0) | 2020.12.14 |
클라이언트 화면 모니터링하기 (Section 93) (0) | 2020.12.14 |