- Containers: String, Array, HashMap 容器实现及测试 - Memory: Allocator, LinearAllocator, PoolAllocator, ProxyAllocator, MemoryManager 实现及测试 - Threading: Mutex, SpinLock, ReadWriteLock, Thread, Task, TaskSystem 实现及测试 - 修复Windows平台兼容性: _aligned_malloc, std::hash特化 - 修复构建错误和测试用例问题
47 lines
1.1 KiB
C++
47 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
#include "LinearAllocator.h"
|
|
#include "PoolAllocator.h"
|
|
#include "ProxyAllocator.h"
|
|
|
|
namespace XCEngine {
|
|
namespace Memory {
|
|
|
|
class IAllocator;
|
|
class LinearAllocator;
|
|
class PoolAllocator;
|
|
class ProxyAllocator;
|
|
|
|
class MemoryManager {
|
|
public:
|
|
static MemoryManager& Get();
|
|
|
|
void Initialize();
|
|
void Shutdown();
|
|
|
|
IAllocator* GetSystemAllocator();
|
|
|
|
std::unique_ptr<LinearAllocator> CreateLinearAllocator(size_t size);
|
|
std::unique_ptr<PoolAllocator> CreatePoolAllocator(size_t blockSize, size_t count);
|
|
std::unique_ptr<ProxyAllocator> CreateProxyAllocator(const char* name);
|
|
|
|
void SetTrackAllocations(bool track);
|
|
void DumpMemoryLeaks();
|
|
void GenerateMemoryReport();
|
|
|
|
private:
|
|
MemoryManager() = default;
|
|
~MemoryManager() = default;
|
|
|
|
IAllocator* m_systemAllocator = nullptr;
|
|
bool m_initialized = false;
|
|
bool m_trackAllocations = true;
|
|
};
|
|
|
|
#define XE_ALLOC(allocator, size, ...) allocator->Allocate(size, ##__VA_ARGS__)
|
|
#define XE_FREE(allocator, ptr) allocator->Free(ptr)
|
|
|
|
} // namespace Memory
|
|
} // namespace XCEngine
|