2.6 KiB
2.6 KiB
ProxyAllocator
命名空间: XCEngine::Memory
类型: class
头文件: XCEngine/Memory/ProxyAllocator.h
描述: 在已有分配器外面包一层统计逻辑的代理分配器。
概述
ProxyAllocator 不直接拥有原始堆,而是把所有内存操作转发给底层分配器,并在外层记录统计信息。这种设计适合:
- 调试某个子系统的内存使用
- 给同一个底层分配器增加具名统计视图
- 在不改底层分配器实现的前提下,追加追踪逻辑
所有权
- Constructor 接收一个底层
IAllocator*和一个名称。 - 当前
ProxyAllocator不拥有底层分配器,不会在销毁时释放它。 - 当前实现既不校验底层分配器是否为空,也不复制名称字符串。
MemoryManager::CreateProxyAllocator当前总是包装系统分配器,而不是任意自定义底层分配器。
当前实现限制
- Free 会把
totalFreed增加为“当前 allocation count”,而不是被释放块的真实大小,因此释放字节统计当前并不准确。 - Reallocate 只转发调用,不更新统计信息。
- 如果底层分配器失效或被提前销毁,后续所有代理操作都可能触发未定义行为。
GetStats()返回内部结构体引用,当前没有为只读访问额外加锁。memoryOverhead字段存在,但当前没有被维护。
线程语义
Allocate、Free和Reallocate当前在内部使用Threading::Mutex保护统计更新。GetStats()是无锁只读返回;更适合在无并发修改或调试快照场景下读取。
公开方法
| 方法 | 说明 |
|---|---|
| Constructor | 构造代理分配器。 |
| Allocate | 通过底层分配器分配,并更新统计。 |
| Free | 通过底层分配器释放,并更新统计。 |
| Reallocate | 转发重分配。 |
| GetTotalAllocated | 查询累计分配字节。 |
| GetTotalFreed | 查询累计释放字节。 |
| GetPeakAllocated | 查询峰值净分配量。 |
| GetAllocationCount | 查询当前统计中的分配计数。 |
| GetStats | 读取完整统计结构。 |
| GetName | 查询代理名称。 |