IT공부/IT서적

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 20장. 메모리 관리

shine94 2025. 3. 11. 23:00

* 해당 글은 윤성우의 뇌를 자극하는 윈도우즈 시스템 프로그래밍 도서를 읽고 정리한 글입니다

   https://product.kyobobook.co.kr/detail/S000001223395

 

뇌를 자극하는 윈도우즈 시스템 프로그래밍 | 윤성우 - 교보문고

뇌를 자극하는 윈도우즈 시스템 프로그래밍 |

product.kyobobook.co.kr

 

https://www.inflearn.com/course/%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/dashboard

 

[지금 무료]뇌를 자극하는 윈도우즈 시스템 프로그래밍 강의 | 한빛미디어 - 인프런

한빛미디어 | , [사진] 1. 강좌 소개 한빛미디어(주) 에서 발간한 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 의 저자 윤성우 님이 직접 강의하는 온라인 강좌입니다. 이미 여러 저서와 온라인

www.inflearn.com

 

 

 

 

* Windows 시스템에서 부여할 수 있도록 정의한 페이지의 상태

   (1) Reserve - 예약

   (2) Commit - 할당

   (3) Free - 할당되지 않았음

 

   예약을 했을 뿐 할당이 완료된 상태가 아니므로 물리 메모리에 할당되지는 않는다

   Reserve 상태에 있는 메모리 중에서 일부만 COMMIT 상태로 변경하는 것도 가능하다

   ㄴ 따라서,

                     메모리의 사용량이 늘어남에 따라서 점진적으로 Commit 상태의 페이지 개수를 증가시킬 수 있다

                     정말 필요한 만큼의 페이지만 물리 메모리에 할당하는 것이 가능하다

 

* 페이지의 개수 = 가상 메모리의 크기 / 페이지 하나당 크기

 

* 가상 메모리 시스템은 페이지 단위로 관리된다

   페이지의 중간 위치에서부터 할당을 시작할 수 없으며, 페이지 크기의 배수 단위로 할당 해야 한다

 

* 메모리 할당의 시작 주소가 될 수 있는 기본 단위를 가리켜 'Allocation Granularity Boundary'라고 한다

 

* VirtualAlloc 함수 - Reserve와 Commit 상태로 만듦, VirtualFree 함수 - Free 상태로 만듦

https://learn.microsoft.com/ko-kr/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc

 

VirtualAlloc 함수(memoryapi.h) - Win32 apps

호출 프로세스의 가상 주소 공간에서 페이지 영역의 상태를 예약, 커밋 또는 변경합니다. (VirtualAlloc)

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/memoryapi/nf-memoryapi-virtualfree

 

VirtualFree 함수(memoryapi.h) - Win32 apps

호출 프로세스의 가상 주소 공간 내에서 페이지 영역을 해제, 커밋 해제 또는 해제합니다.

learn.microsoft.com

 

* 디폴트 힙(Default Heap, 프로세스 힙, Process Heap)

   디폴트 힙의 기본 크기는 1MB이나 링커(Linker) 옵션을 통해서 변경 가능

 

* Windows 시스템 힙(Dynamic Heap) 장점

   (1) 메모리 단편화의 최소화에 따른 성능 향상

   (2) 동기화 문제에서 자유로워짐으로 인한 성능 향상

 

https://learn.microsoft.com/ko-kr/windows/win32/api/heapapi/nf-heapapi-heapcreate

 

HeapCreate 함수(heapapi.h) - Win32 apps

호출 프로세스에서 사용할 수 있는 프라이빗 힙 개체를 만듭니다. 함수는 프로세스의 가상 주소 공간에 공간을 예약하고 이 블록의 지정된 초기 부분에 대한 물리적 스토리지를 할당합니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/heapapi/nf-heapapi-heapalloc

 

HeapAlloc 함수(heapapi.h) - Win32 apps

힙에서 메모리 블록을 할당합니다. 할당된 메모리는 움직일 수 없습니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/heapapi/nf-heapapi-heapfree

 

HeapFree 함수(heapapi.h) - Win32 apps

HeapAlloc 또는 HeapReAlloc 함수에 의해 힙에서 할당된 메모리 블록을 해제합니다.

learn.microsoft.com

 

* MMF(Memory Mapped File)

   File을 Memory에 Mapping(연결)시킨다는 의미

   ㄴ 장점

       (1) 프로그래밍하기 편하다

       (2) 성능이 향상된다

 

https://learn.microsoft.com/ko-kr/windows/win32/api/winbase/nf-winbase-createfilemappinga

 

CreateFileMappingA 함수(winbase.h) - Win32 apps

지정된 파일에 대한 명명되거나 명명되지 않은 파일 매핑 개체를 만들거나 엽니다. (CreateFileMappingA)

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/memoryapi/nf-memoryapi-mapviewoffile

 

MapViewOfFile 함수(memoryapi.h) - Win32 apps

호출 프로세스의 주소 공간에 파일 매핑 보기를 매핑합니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/memoryapi/nf-memoryapi-unmapviewoffile

 

UnmapViewOfFile 함수(memoryapi.h) - Win32 apps

호출 프로세스의 주소 공간에서 파일의 매핑된 보기를 매핑 해제합니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/memoryapi/nf-memoryapi-flushviewoffile

 

FlushViewOfFile 함수(memoryapi.h) - Win32 apps

파일의 매핑된 보기 내에서 바이트 범위를 디스크에 씁니다.

learn.microsoft.com

 

* Copy On Write(COW)

   write 할 때 copy 하라