docs: rebuild Memory API content
This commit is contained in:
@@ -6,34 +6,54 @@
|
||||
|
||||
**头文件**: `XCEngine/Memory/ProxyAllocator.h`
|
||||
|
||||
**描述**: 定义 `XCEngine/Memory` 子目录中的 `ProxyAllocator` public API。
|
||||
**描述**: 在已有分配器外面包一层统计逻辑的代理分配器。
|
||||
|
||||
## 概述
|
||||
|
||||
`ProxyAllocator.h` 是 `XCEngine/Memory` 子目录 下的 public header,当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。
|
||||
`ProxyAllocator` 不直接拥有原始堆,而是把所有内存操作转发给底层分配器,并在外层记录统计信息。这种设计适合:
|
||||
|
||||
## 声明概览
|
||||
- 调试某个子系统的内存使用
|
||||
- 给同一个底层分配器增加具名统计视图
|
||||
- 在不改底层分配器实现的前提下,追加追踪逻辑
|
||||
|
||||
| 声明 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `ProxyAllocator` | `class` | 继承自 `IAllocator` 的公开声明。 |
|
||||
## 所有权
|
||||
|
||||
## 公共方法
|
||||
- [Constructor](Constructor.md) 接收一个底层 `IAllocator*` 和一个名称。
|
||||
- 当前 `ProxyAllocator` 不拥有底层分配器,不会在销毁时释放它。
|
||||
- 当前实现既不校验底层分配器是否为空,也不复制名称字符串。
|
||||
- `MemoryManager::CreateProxyAllocator` 当前总是包装系统分配器,而不是任意自定义底层分配器。
|
||||
|
||||
| 方法 | 描述 |
|
||||
## 当前实现限制
|
||||
|
||||
- [Free](Free.md) 会把 `totalFreed` 增加为“当前 allocation count”,而不是被释放块的真实大小,因此释放字节统计当前并不准确。
|
||||
- [Reallocate](Reallocate.md) 只转发调用,不更新统计信息。
|
||||
- 如果底层分配器失效或被提前销毁,后续所有代理操作都可能触发未定义行为。
|
||||
- `GetStats()` 返回内部结构体引用,当前没有为只读访问额外加锁。
|
||||
- `memoryOverhead` 字段存在,但当前没有被维护。
|
||||
|
||||
## 线程语义
|
||||
|
||||
- `Allocate`、`Free` 和 `Reallocate` 当前在内部使用 `Threading::Mutex` 保护统计更新。
|
||||
- `GetStats()` 是无锁只读返回;更适合在无并发修改或调试快照场景下读取。
|
||||
|
||||
## 公开方法
|
||||
|
||||
| 方法 | 说明 |
|
||||
|------|------|
|
||||
| [ProxyAllocator()](Constructor.md) | 构造对象。 |
|
||||
| [Allocate](Allocate.md) | 公开方法,详见头文件声明。 |
|
||||
| [Free](Free.md) | 公开方法,详见头文件声明。 |
|
||||
| [Reallocate](Reallocate.md) | 公开方法,详见头文件声明。 |
|
||||
| [GetTotalAllocated](GetTotalAllocated.md) | 获取相关状态或对象。 |
|
||||
| [GetTotalFreed](GetTotalFreed.md) | 获取相关状态或对象。 |
|
||||
| [GetPeakAllocated](GetPeakAllocated.md) | 获取相关状态或对象。 |
|
||||
| [GetAllocationCount](GetAllocationCount.md) | 获取相关状态或对象。 |
|
||||
| [GetStats](GetStats.md) | 获取相关状态或对象。 |
|
||||
| [GetName](GetName.md) | 获取相关状态或对象。 |
|
||||
| [Constructor](Constructor.md) | 构造代理分配器。 |
|
||||
| [Allocate](Allocate.md) | 通过底层分配器分配,并更新统计。 |
|
||||
| [Free](Free.md) | 通过底层分配器释放,并更新统计。 |
|
||||
| [Reallocate](Reallocate.md) | 转发重分配。 |
|
||||
| [GetTotalAllocated](GetTotalAllocated.md) | 查询累计分配字节。 |
|
||||
| [GetTotalFreed](GetTotalFreed.md) | 查询累计释放字节。 |
|
||||
| [GetPeakAllocated](GetPeakAllocated.md) | 查询峰值净分配量。 |
|
||||
| [GetAllocationCount](GetAllocationCount.md) | 查询当前统计中的分配计数。 |
|
||||
| [GetStats](GetStats.md) | 读取完整统计结构。 |
|
||||
| [GetName](GetName.md) | 查询代理名称。 |
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [当前目录](../Memory.md) - 返回 `Memory` 平行目录
|
||||
- [API 总索引](../../../main.md) - 返回顶层索引
|
||||
- [当前模块](../Memory.md)
|
||||
- [IAllocator](../Allocator/Allocator.md)
|
||||
- [MemoryManager](../MemoryManager/MemoryManager.md)
|
||||
- [Allocator Selection And Current Limits](../../../_guides/Memory/Allocator-Selection-And-Current-Limits.md)
|
||||
|
||||
Reference in New Issue
Block a user