Proud::CFastHeap 클래스 참조abstract

Public 타입

enum  { DefaultAccelBlockSizeLimit = 2048 }
 

Public 멤버 함수

virtual void * Alloc (size_t size)=0
 
virtual void * Realloc (void *ptr, size_t size)=0
 
virtual void Free (void *ptr)=0
 
virtual int DebugCheckConsistency ()=0
 

정적 Public 멤버 함수

static PROUD_API CFastHeapNew (size_t AccelBlockSizeLimit=DefaultAccelBlockSizeLimit, const CFastHeapSettings &settings=CFastHeapSettings())
 
static PROUD_API void AssureValidBlock (void *block)
 

상세한 설명

빠른 속도로 heap alloc을 하지만 제한 사항이 있는 할당자 클래스.

사용법

장점

  • 할당 속도가 빠르다

단점

  • 이 할당자로 할당한 인스턴스는 main() 종료 전에 파괴되어야 한다. 즉 전역 변수로 둘 때 주의해야 한다.
  • 특정 이상 크기는 가속을 받지 못한다.
  • 메모리 풀 방식이므로 장시간 사용시 잉여 메모리가 남는다. 따라서 자주 할당/파괴를 하는 경우에만 쓰도록 하자.

멤버 함수 문서화

virtual void* Proud::CFastHeap::Alloc ( size_t  size)
pure virtual

메모리를 할당한다. 할당한 메모리는 Realloc이나 Free로 조정될 수 있다.

매개변수
size할당받을 메모리 크기
static PROUD_API void Proud::CFastHeap::AssureValidBlock ( void *  block)
static

block이 fast heap에 의해 만들어진 것이 아니면 에러창을 내거나 크래시가 발생한다.

virtual void Proud::CFastHeap::Free ( void *  ptr)
pure virtual

할당했던 메모리를 해제한다.

매개변수
ptr할당 받았던 메모리의 포인터
static PROUD_API CFastHeap* Proud::CFastHeap::New ( size_t  AccelBlockSizeLimit = DefaultAccelBlockSizeLimit,
const CFastHeapSettings settings = CFastHeapSettings() 
)
static

CFastHeap 객체를 생성한다.

매개변수
AccelBlockSizeLimit이 값보다 큰 크기의 메모리 블럭을 할당할 때마다 lookaside allocator 방식을 쓰지 않는 통상적인 메모리 블럭을 할당한다. 이 값이 클 수록 더 많은 메모리를 소모하지만 빠른 속도이 heap 할당 확률이 커진다. (그렇다고 지나치게 크면 page fault 비용으로 인한 성능 저하가 되레 발생한다.)
pHeap만약 이 Fast Heap이 ProudNet에서 미리 생성한 전용 Heap이 아닌 다른 Heap을 사용하게 만들고자 한다면 여기에 CMemoryHeap 객체의 포인터를 넣어야 한다. 단, 이 클래스가 CMemoryHeap 을 자동 제거하지는 않는다. NULL을 넣으면 ProudNet에서 미리 생성한 전용 Heap을 사용한다.
safeModeCLookasideAllocator.New() 참고
debugSafetyCheckCritSec디버그용이다. safeMode가 false인 경우에만 유효하다. 이 fast heap을 접근할 때마다 debugSafetyCheckCritSec 가 가리키는 critical section이 현재 스레드에 의해 잠금 상태인지 체크하고, 잠금 상태가 아니면 에러를 발생시키는 알람을 한다.
virtual void* Proud::CFastHeap::Realloc ( void *  ptr,
size_t  size 
)
pure virtual

메모리를 재할당한다. 재할당한 메모리는 위치가 바뀔 수 있기 때문에 리턴되는 포인터 값을 반드시 참조할 것.

매개변수
ptr재할당할 메모리 포인터
size재할당할 메모리 사이즈