Files
XCEngine/docs/api/XCEngine/Memory/ProxyAllocator/ProxyAllocator.md

2.6 KiB
Raw Blame History

ProxyAllocator

命名空间: XCEngine::Memory

类型: class

头文件: XCEngine/Memory/ProxyAllocator.h

描述: 在已有分配器外面包一层统计逻辑的代理分配器。

概述

ProxyAllocator 不直接拥有原始堆,而是把所有内存操作转发给底层分配器,并在外层记录统计信息。这种设计适合:

  • 调试某个子系统的内存使用
  • 给同一个底层分配器增加具名统计视图
  • 在不改底层分配器实现的前提下,追加追踪逻辑

所有权

  • Constructor 接收一个底层 IAllocator* 和一个名称。
  • 当前 ProxyAllocator 不拥有底层分配器,不会在销毁时释放它。
  • 当前实现既不校验底层分配器是否为空,也不复制名称字符串。
  • MemoryManager::CreateProxyAllocator 当前总是包装系统分配器,而不是任意自定义底层分配器。

当前实现限制

  • Free 会把 totalFreed 增加为“当前 allocation count”而不是被释放块的真实大小因此释放字节统计当前并不准确。
  • Reallocate 只转发调用,不更新统计信息。
  • 如果底层分配器失效或被提前销毁,后续所有代理操作都可能触发未定义行为。
  • GetStats() 返回内部结构体引用,当前没有为只读访问额外加锁。
  • memoryOverhead 字段存在,但当前没有被维护。

线程语义

  • AllocateFreeReallocate 当前在内部使用 Threading::Mutex 保护统计更新。
  • GetStats() 是无锁只读返回;更适合在无并发修改或调试快照场景下读取。

公开方法

方法 说明
Constructor 构造代理分配器。
Allocate 通过底层分配器分配,并更新统计。
Free 通过底层分配器释放,并更新统计。
Reallocate 转发重分配。
GetTotalAllocated 查询累计分配字节。
GetTotalFreed 查询累计释放字节。
GetPeakAllocated 查询峰值净分配量。
GetAllocationCount 查询当前统计中的分配计数。
GetStats 读取完整统计结构。
GetName 查询代理名称。

相关文档