2.2 KiB
2.2 KiB
ProxyAllocator
命名空间: XCEngine::Memory
类型: class
描述: 代理分配器,包装另一个分配器并记录分配统计信息,用于内存跟踪和调试。
概述
ProxyAllocator 是对另一个分配器的包装,它将所有分配请求转发给底层分配器,同时记录分配统计信息。这对于分析内存使用模式和调试内存问题非常有用。
公共方法
构造
| 方法 | 描述 |
|---|---|
ProxyAllocator(IAllocator* underlying, const char* name) |
构造函数,指定底层分配器和名称 |
IAllocator 实现
| 方法 | 描述 |
|---|---|
void* Allocate(size_t size, size_t alignment = 0) override |
分配并统计 |
void Free(void* ptr) override |
释放并统计 |
void* Reallocate(void* ptr, size_t newSize) override |
重新分配并统计 |
统计
| 方法 | 描述 |
|---|---|
size_t GetTotalAllocated() const override |
总分配字节数 |
size_t GetTotalFreed() const override |
总释放字节数 |
size_t GetPeakAllocated() const override |
峰值分配字节数 |
size_t GetAllocationCount() const override |
分配次数 |
const Stats& GetStats() const |
获取详细统计信息 |
Stats 结构体
| 成员 | 类型 | 描述 |
|---|---|---|
totalAllocated |
size_t |
累计分配字节数 |
totalFreed |
size_t |
累计释放字节数 |
peakAllocated |
size_t |
峰值分配字节数 |
allocationCount |
size_t |
分配次数 |
memoryOverhead |
size_t |
额外开销(字节) |
使用示例
// 包装系统分配器
IAllocator* sysAlloc = MemoryManager::Get().GetSystemAllocator();
ProxyAllocator proxy(sysAlloc, "FrameData");
// 使用代理分配器
void* ptr = proxy.Allocate(1024);
// 获取统计
const ProxyAllocator::Stats& stats = proxy.GetStats();
printf("Total allocated: %zu bytes\n", stats.totalAllocated);
printf("Peak allocated: %zu bytes\n", stats.peakAllocated);
printf("Allocation count: %zu\n", stats.allocationCount);
printf("Current in use: %zu bytes\n",
stats.totalAllocated - stats.totalFreed);
相关文档
- IAllocator - 分配器接口
- MemoryManager - 内存管理器