[WinAPI] allocation granularity란?

더 자세한 사항은 아래에서 참조
http://luto.tistory.com/28

region들의 집합이 윈도우즈 메모리
1개의 region64kb
프로그램에서 메모리를 할당받을때 사용되는 단위가 allocation granularity인데, 크기는 64kb
1개의 page는 메모리 할당의 최소의 단위로 4kb
(만약 프로그램에서 10kb의 메모리 공간을 할당받으려 하면, x86기반에서는 4kb의 배수인 12kb를 할당받게 된다)

SYSTEM_INFO si;
GetSystemInfo(&si);
si.dwPageSize = 4096
si.lpMinimumApplicationAddress = 0x00010000
si.lpMaxkimApplicationAddress = 0x7ffeffff
si.dwAllocationGranularity = 65536

PageTable에는 페이지가 램에 존재하는지 페이징파일에 존재하는지에 대한 정보를 갖고있다
가상메모리 공간을 확보하거나 커밋하기 위해 다음의 함수를 쓴다.
VirtualAlloc(
 LPVOiD lpAddress,
 DWORD dwSize,
 DWORD flAllocationType,
 DWORD flProtect
);

lpAddress : 시스템이 자동으로 빈공간을 정하도록 할때에는 NULL, 특정주소를 넘겨줄땐 반드시 UserArea 범위내의 주소. 주의점으로 이 주소값을 할당세밀도(allocation grarularity)의 단위에 맞춰야 한다. (64kb+1024byte)의 영역을 할당하게 되면 시스템은 이를 내림하여 (64kb)의 주소부터 영역을 할당하게 된다.
dwSize : 확보하고 싶은 주소의 크기를 바이트 단위로. 영역의 크기는 반드시 시스템 페이지의 크기의 배수여야 한다.
flAllocatioType : 확보할것인지, 커밋할것인지를 나타냄. 차곡차곡 순서대로 영역이 확보될것이라는 보장은 없다.
flProtect : 해당영역에 할당할 보호 특성을 지정한다.

댓글

이 블로그의 인기 게시물

[WinAPI] 모달리스 다이얼로그 설명

[WinDbg] Debugging a stack overflow

[WinDbg] first-chance, second-chance Exception