# 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` | 额外开销(字节) | ## 使用示例 ```cpp // 包装系统分配器 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](./memory-allocator.md) - 分配器接口 - [MemoryManager](./memory-manager.md) - 内存管理器