72 lines
2.2 KiB
Markdown
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) - 内存管理器
|