2.빠른 메모리 관리자

Edit

ProudNet은 고성능 메모리 관리자가 내장되어 있습니다. 개발자는 고성능 메모리 관리자를 이용해서 응용 프로그램의 처리 성능을 가속할 수 있습니다.

ProudNet에서 지원하는 메모리 관리자는 크게 다음과 같습니다.

2.1Lookaside allocator

Lookaside allocator는 통상적인 memory pool 기법을 응용합니다. 만약 항상 동일한 크기의 메모리를 자주 할당/해제해야 한다면 Lookaside allocator를 사용하는 것이 좋습니다.

Lookaside allocator의 주요 메카니즘은 아래와 같습니다.

이 과정은 매우 빠른 속도로 실행됩니다. OS 환경에서의 메모리 할당 속도보다 훨씬 빠릅니다. 하지만 단점도 존재합니다.

Lookaside allocator를 쓰는 방법은 다음과 같습니다.

자세한 것은 Proud.CLookasideAllocator의 설명을 참고하십시오.

2.3 C++ 클래스의 기본 할당자로 지정하기도 본 모듈을 쓰는 좋은 방법 중 하나입니다.

2.2Fast heap

ProudNet의 Fast heap은 Lookaside allocator보다 약간 더 느리지만 OS 환경에서의 메모리 할당/해제 속도보다는 훨씬 빠릅니다. 그리고 Lookaside allocator와 달리 다양한 크기의 메모리 블럭을 할당/해제가 가능합니다.

ProudNet의 Fast heap의 구현 클래스는 Proud.CFastHeap입니다. Proud.CFastHeap 또한 lookaside allocator와 마찬가지로 모든 메모리 블럭이 파괴된 후에야 Proud.CFastHeap 객체를 제거할 수 있습니다.

Fast heap을 쓰는 방법은 다음과 같습니다.

자세한 것은 Proud.CFastHeap의 설명을 참고하십시오.

2.3 C++ 클래스의 기본 할당자로 지정하기도 본 모듈을 쓰는 좋은 방법 중 하나입니다.

2.3C++ 클래스의 기본 할당자로 지정하기

Fast heap이나 Lookaside allocator를 C++ 클래스에서 가속을 쉽게 받는 방법은 C++의 operator new, delete 메서드를 오버라이드하는 것입니다. 이렇게 하면 C++ 클래스를 new, delete 연산자로 생성, 파괴할 때 시스템의 메모리 heap 대신 fast heap이나 lookaside allocator가 사용됩니다.

아래 예시에서, 클래스가 operator new나 delete로 인스턴스화할 때 고성능 메모리 관리자가 대신 메모리를 할당/해제하게 합니다.

class Example
{
    static CLookasideAllocatorPtr gAlloc; // 혹은 CFastHeap을 써도 OK.
public:
    void* operator new(size_t size)
    {
        return gAlloc->Alloc(size);
    }
    void operator delete(void* ptr, size_t size)
    {
        gAlloc->Free(ptr);
    }
};

CLookasideAllocatorPtr Example::gAlloc(CLookasideAllocator::New()); // 혹은 CFastHeap을 써도 OK.

이들은 각각 서로 다른 장단점이 존재합니다. 적절히 선택을 하십시오.