개인공부121 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. Chapter 1 - 멀티쓰레드 프로그래밍 (7) Reader-Writer Lock /*---------------- RW SpinLock -----------------*/ /*-------------------------------------------- [WWWWWWWW][WWWWWWWW][RRRRRRRR][RRRRRRRR] W : WriteFlag (Exclusive Lock Owner ThreadId) R : ReadFlag (Shared Lock Count) ---------------------------------------------*/ // W -> R (O) // R -> W (x) class Lock { enum : uint32 { ACQUIRE_TIMEOUT_TICK = 10000, MAX_SPIN_COUNT = 5000, WRI.. 2023. 3. 29. 이전 1 2 3 4 5 6 7 ··· 31 다음