2.8 KiB
2.8 KiB
Memory
命名空间: XCEngine::Memory
类型: module
描述: 提供分配器抽象、线性分配器、固定块池分配器、统计代理分配器以及全局内存工厂入口。
概述
XCEngine::Memory 试图把“如何分配内存”从具体容器和系统模块中抽离出来。当前模块的公共 API 分成两层:
IAllocator定义统一分配器接口。LinearAllocator、PoolAllocator和ProxyAllocator提供不同策略的具体实现。MemoryManager负责初始化内部系统分配器并创建若干常用分配器对象。
这类设计在商业级引擎里很常见,因为不同场景对内存的需求完全不同:
- 帧级临时数据更适合 arena / linear allocator。
- 大量固定尺寸对象更适合 pool allocator。
- 调试和统计更适合在已有分配器外面套一层 proxy / tracking allocator。
当前实现成熟度
当前公开接口比实现完整度更大,需要把这点写清楚:
LinearAllocator的Free和Reallocate目前都是空实现或占位返回。PoolAllocator的Reallocate目前返回nullptr。ProxyAllocator能转发分配,但其释放统计和重分配统计并不完整。MemoryManager::DumpMemoryLeaks和GenerateMemoryReport目前只输出标题文本。MemoryManager::SetTrackAllocations当前只修改标志位,没有驱动其它行为。- 通过
MemoryManager创建且依赖系统分配器的对象,当前仍需要调用方自己保证在Shutdown()前完成销毁。
设计要点
- 引擎级分配器 API 的价值,不在于替代系统
malloc,而在于为不同生命周期和数据形态提供更明确的分配策略。 IAllocator让容器和上层系统可以依赖抽象,而不是依赖某个具体分配器实现。ProxyAllocator反映了“组合优于继承”的思路:统计逻辑可以叠加在任意底层分配器上。MemoryManager当前更像工厂与引导入口,而不是完整的全局内存分析系统。
头文件
- Allocator -
Allocator.h,分配器抽象接口IAllocator。 - LinearAllocator -
LinearAllocator.h,线性/arena 风格分配器。 - MemoryManager -
MemoryManager.h,系统分配器与工厂入口。 - PoolAllocator -
PoolAllocator.h,固定块池分配器。 - ProxyAllocator -
ProxyAllocator.h,统计代理分配器。
相关指南
- Allocator Selection And Current Limits - 解释各分配器适合什么场景、当前实现做到哪一步,以及与商业引擎常见内存策略的关系。