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

72 lines
2.2 KiB
Markdown

# 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) - 内存管理器