본문 바로가기

server14

Chapter 2 - 메모리 관리 (4) Object Pool 기존 메모리 풀은 비슷한 크기의 메모리들을 같은 메모리 풀에 넣어 공용으로 사용함 이 때 메모리가 오염된 경우 원인을 찾기 힘들다는 단점이 존재 따라서 동일한 크기가 아닌 동일한 클래스끼리 묶어서 관리하는 오브젝트 풀을 사용할 수 있음 // ObjectPool.h #include "Types.h" #include "MemoryPool.h" template class ObjectPool { public: template static Type* Pop(Args&&... args) { #ifdef _STOMP MemoryHeader* ptr = reinterpret_cast(StompAllocator::Alloc(s_allocSize)); Type* memory = static_cast(.. 2023. 3. 29.
Chapter 2 - 메모리 관리 (3) Memory Pool #1 메모리 풀링 : 메모리의 재사용 개념, 미리 메모리를 할당해 놓은 뒤 확보된 공간을 제공/회수 메모리 해제, 할당 반복시 컨텍스트 스위칭이 일어나기 때문에 자원의 낭비가 발생 메모리 해제, 할당 반복시 메모리 파편화가 발생할 수 있음 이를 메모리 풀링을 통해 방지할 수 있으나, 최근의 할당기는 성능이 뛰어나기 때문에 선택의 영역이 됨 // MemoryPool.h /*----------------- MemoryHeader ------------------*/ // 할당된 객체의 정보가 담긴 구조체, 데이터 앞에 들어감 // [MemoryHeader][Data] struct MemoryHeader { MemoryHeader(int32 size) : allocSize(size) {}.. 2023. 3. 29.
Chapter 2 - 메모리 관리 (2) Allocator 기본 new와 delete를 사용하는 대신 메모리 풀링 기법을 사용하면 속도를 향상시킬 수 있음 class Knight { public: Knight() { cout 2023. 3. 29.
Chapter 2 - 메모리 관리 (1) Reference Counting /*----------------- RefCountable ------------------*/ class RefCountable { public: RefCountable() : _refCount(1) {} virtual ~RefCountable() {} int32 GetRefCount() { return _refCount; } int32 AddRef() { return ++_refCount; } int32 ReleaseRef() { int32 refCount = --_refCount; if (refCount == 0) { delete this; } return refCount; } protected: int32 _refCount; }; class Wraight : pu.. 2023. 3. 29.