Win32 메모리 구조
16비트 환경 메모리 구조
- 8088/86 : 최대 1메가, segment/offset
- 80286 : 1메가 + 15메가(보호모드에서만 사용가능)
80386(32비트)
- 최대 4G 메모리까지 관리 가능.
가상메모리
메모리 + 하드 디스크 페이징 파일.
페이지 단위(약 4K)로 메모리 관리.
가상 주소 공간 -> 페이지 테이블 -> 물리 메모리
C런타임 함수
void *malloc(size_t size);
참고주소 : http://www.winapi.co.kr/cpp/reference/malloc.gif
size바이트 만큼 메모리 할당.
void free(void *memblock);
참고주소 : http://www.winapi.co.kr/cpp/reference/free.gif
memblock에 할당된 메모리를 해제한다.
WIN32 가상메모리 관리 함수
LPVOID WINAPI VirtualAlloc(__in_opt LPVOID lpAddress, __in SIZE_T dwSize, __in DWORD flAllocationType, __in DWORD flProtect);
참고주소 : http://msdn.microsoft.com/en-us/library/aa366887(VS.85).aspx
가상메모리 주소를 예약하거나 (사용가능하도록) 할당한다.
- lpAddress : 사용할 가상 메모리 주소. 시작주소는 64KB단위(하위 2바이트는 0으로 만듬).
- dwSize : 사용할 메모리의 바이트양.
- flAllocationType : 메모리 할당 형태.
MEM_RESERVE : 메모리를 예약함.(많은 양을 쓸 경우 실제로 나누어 쓰기 위해...)
MEM_COMMIT : 메모리를 사용 가능하도록 할당함.
- flProtect : 메모리 접근 형태 지정.
PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE
PAGE_GUARD, PAGE_NOACCESS, PAGE_NOCACHE
BOOL WINAPI VirtualFree(__in LPVOID lpAddress, __in SIZE_T dwSize, __in DWORD dwFreeType);
참고주소 : http://msdn.microsoft.com/en-us/library/aa366892(VS.85).aspx
가상메모리 예약을 파기하거나 할당된 메모리를 해제한다.
- 메모리 잠금 함수
특정 데이터가 RAM에만 존재하게 잠근다.
BOOL WINAPI VirtualLock(__in LPVOID lpAddress, __in SIZE_T dwSize);
참고주소 : http://msdn.microsoft.com/en-us/library/aa366895(VS.85).aspx
가상 메모리가 후에 page fault가 발생하지 않도록 보장하면서 물리적 주소로 정해지도록 잠근다.
- lpAddress : 잠그길 원하는 base(시작) 주소
- dwSize : 바이트 크기. 잠그길 원하는 영역의 크기.
VirtualUnLock
참고주소 : http://msdn.microsoft.com/en-us/library/aa366910(VS.85).aspx
필요하다면 페이징 파일이 page out될 수 있도록 프로세스의 가상 메모리의 잠금을 해제한다.
BOOL WINAPI VirtualUnlock(__in LPVOID lpAddress, __in SIZE_T dwSize);
- lpAddress : 잠그길 원하는 base(시작) 주소
- dwSize : 바이트 크기. 해제하길 원하는 영역의 크기.
힙메모리 함수
기본 디폴트 힙의 용량은 1M다.
LPVOID WINAPI HeapAlloc(__in HANDLE hHeap, __in DWORD dwFlags, __in SIZE_T dwBytes);
참고주소 : http://msdn.microsoft.com/en-us/library/aa366597(VS.85).aspx
힙으로부터 메모리의 블록을 할당한다. 할당된 메모리는 이동할 수 없다.
- hHeap : 메모리가 할당될 힙의 핸들.
- dwflags : 메모리 할당 옵션. HEAP_GENERATE_EXCEPTIONS, HEAP_NO_SERIALIZE, HEAP_ZERO_MEMORY
- dwBytes : 할당될 바이트 수
BOOL WINAPI HeapFree(__in HANDLE hHeap, __in DWORD dwFlags, __in LPVOID lpMem);
참고주소 : http://msdn.microsoft.com/en-us/library/aa366701(VS.85).aspx
HeapAlloc이나 HeapReAlloc에 의해 할당된 메모리 블록을 해제한다.
HANDLE WINAPI HeapCreate(__in DWORD flOptions, __in SIZE_T dwInitialSize, __in SIZE_T dwMaximumSize);
참고주소 : http://msdn.microsoft.com/en-us/library/aa366599(VS.85).aspx
호출한 프로세스에 의해 사용될 수 있는 힙 객체를 생성한다. 이 함수는 프로세스의 가상 메모리 공간을 예약하고 특정 초기화 부분에 대한 물리적 저장공간을 할당한다.
- flOption : 메모리 할당 옵션. HEAP_GENERATE_EXCEPTIONS, HEAP_NO_SERIALIZE, HEAP_ZERO_MEMOR
- dwInitialSize : 바이트 단위, 힙의 초기 크기.
- dwMaximumSize : 바이트 단위. 힙의 최대 크기.
BOOL WINAPI HeapDestroy(__in HANDLE hHeap);
참고주소 : http://msdn.microsoft.com/en-us/library/aa366700(VS.85).aspx
특정 힙 객체를 파괴한다. 힙 객체의 모든 페이지를 예약취소 및 해제하며 무효화 시킨다.
- hHeap : 파괴할 힙 핸들.
'컴퓨터 공부 > Win32 API 프로그래밍' 카테고리의 다른 글
[5월 11일 1교시] 멀티 쓰레드 2 (0) | 2009.05.11 |
---|---|
[5월 8일 3교시] 메모리 2 + 멀티 쓰레드 1 (0) | 2009.05.08 |
[5월 8일 1교시] 시스템 정보 2 (0) | 2009.05.08 |
[5월 7일 3교시] 시스템 정보 1 (0) | 2009.05.07 |
[5월 7일 2교시] 공통 컨트롤 3 (0) | 2009.05.07 |