Files
XCEngine/docs/api/memory/memory-proxy-allocator.md

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);

相关文档