반응형

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시키도록 오버로딩 시켜야 되지 않을까요??

  • 2009/07/28 21:01

    new/delete, malloc/free가 내부적으로 HeapAlloc/HeapFree를 호출합니다.


반응형

+ Recent posts