http://cafe.naver.com/jzsdn/17321
===== 19. 메모리 풀 =====
슈팅게임에서는 많은 오브젝트가 생성되고, 삭제되므로
빠른 힙메모리 생성및 삭제가 필요하다.
그래서, 여기서는 MS가 만든 메모리 풀을 사용한다.
1. LFH사용설정
2. LFH호출
3. Low-Fragmentation Heap의 장점
4. Low-Fragmentation Heap사용시 참고
1. LFH사용설정
BOOL CheckLFH(VOID)
{
ULONG HeapFragValue = 2;
if(HeapSetInformation(GetProcessHeap(),
HeapCompatibilityInformation,
&HeapFragValue,
sizeof(HeapFragValue))
)
{
return TRUE;
}
return FALSE;
}
프로세스의 힙핸들을 가져와서 설정하는것만으로
메모리 풀을 사용하는 모든 절차는 끝이난다.
2. LFH호출
BOOL bLFH = CheckLFH();
if (bLFH)
MessageBoxW( NULL, L"LFH를 사용합니다", L"정보", MB_OK );
프로그램이 시작할때 한번호출해준다.
디버거가 연결되면(F5) 디버그 힙을 사용하므로 CTRL+F5를 눌러야
Low-Fragmentation Heap이 사용되고, TRUE가 리턴되는것을 알수있다.
3. Low-Fragmentation Heap의 장점
특별히 프로그래머는 신경쓰지 않아도, 메모리풀을 사용,
프로그램의 질을 높일수있다.
메모리 단편화를 예방할수있고, 힙메모리생성, 삭제시 효율이 높아진다.
특히, 멀티코어 시스템에서 높은 성능향상이 있다.
4. Low-Fragmentation Heap사용시 참고
이 함수가 호출되지 않아도, 이코드가 있으면 Win2000Pro Sp4이상의
OS에서만 동작하므로, Win98을 지원하려고 한다면, 주석화시켜야 한다.
비스타는 이함수를 호출하지 않아도 기본동작한다.
이 함수는 하나의 프로세스에 메모리풀을 사용함으로 멀티프로세스로 동작하려면, 수정이필요하다.
16K보다 작은 메모리를 할당하면, LFH에 메모리가 할당, 그이상은 기존힙에서 할당된다.
- 2009/07/28 10:30
잘 봤습니다.
음.. 궁금한 점이 있는데 new/delete도 HeapAlloc(GetProcessHeap()....) 으로 잡고
HeapFree(GetProcessHeap(), ...)로 delete시키도록 오버로딩 시켜야 되지 않을까요??
'운영체제 & 병렬처리 > 시스템프로그래밍' 카테고리의 다른 글
골치 아픈 Memory Fragmentation (0) | 2013.09.27 |
---|---|
윈도우 힙 || CRT 힙 (0) | 2013.09.27 |
GlobalMemoryStatus() , GlobalMemoryStatusEx() - 컴퓨터 메모리 체크 (0) | 2013.09.25 |
작업 관리자 메모리 열의 의미 (0) | 2013.09.17 |
TLS - 스레드 지역 기억장소 (Thread Local Storage) 공간 (0) | 2013.05.26 |