#pragma once
#include "MemoryPool.h"
#include "Types.h"
template<typename Type>
class ObjectPool {
public:
template<typename... Args>
static Type* Pop(Args&&... args) {
Type* memory = reinterpret_cast<Type*>(MemoryHeader::AttachHeader(s_pool.Pop(), s_allocSize));
new(memory)Type(std::forward<Args>(args)...);
return memory;
}
static void Push(Type* ptr) {
ptr->~Type();
s_pool.Push(MemoryHeader::DetachHeader(ptr));
}
template<typename... Args>
static shared_ptr<Type> MakeShared(Args&&... args) {
shared_ptr<Type> ptr = { Pop(args...), Push };
return ptr;
}
private:
static MemoryPool s_pool;
static int32 s_allocSize;
};
template<typename Type>
int32 ObjectPool<Type>::s_allocSize = sizeof(Type) + sizeof(MemoryHeader);
template<typename Type>
MemoryPool ObjectPool<Type>::s_pool{ s_allocSize };
메모리 풀링에서 특정 객체전용으로 풀링해주는 느낌이다.
메모리 풀링으로만 메모리를 할당해주면 나중에 메모리 오염시 어떤 객체가 오염을 일으키는지 찾기 어려울 수 있음.
그래서 객체전용으로 따로 풀링을 해준다면 디버그할 때 찾기 수월해진다.
'MMOServer' 카테고리의 다른 글
TCP(C++) (0) | 2025.04.01 |
---|---|
SocketProgramming Basic(C++) (0) | 2025.04.01 |
MemoryPool(C++) (0) | 2025.03.28 |
SList(C++) 불완전 (0) | 2025.03.28 |
메모리 관련 (0) | 2025.03.27 |