2.9 KiB
2.9 KiB
LinearAllocator
命名空间: XCEngine::Memory
类型: class
头文件: XCEngine/Memory/LinearAllocator.h
描述: 以单调递增偏移量分配内存的线性分配器,适合临时或批量释放场景。
概述
LinearAllocator 是典型的 bump / arena allocator:每次分配只推进一个偏移量,不跟踪单个块,也不支持逐块释放。它适合:
- 帧级临时内存
- 批量构建后整体清空的中间数据
- 需要极低分配开销、但不要求单个对象回收的场景
生命周期与所有权
- Constructor 创建一块固定容量缓冲区。
- 如果传入父分配器,底层缓冲由父分配器提供并在析构时归还给父分配器。
- 如果没有父分配器,当前实现会直接在构造函数中申请原生内存。
- Clear 会把偏移量重置为零,相当于一次性回收所有线性分配结果。
当前实现限制
- Free 目前是空实现,不会释放单个块。
- Reallocate 目前始终返回
nullptr。 GetMarker/SetMarker使用的是“偏移量令牌”,不是缓冲区中的真实指针。GetPeakAllocated当前直接返回总容量,而不是历史峰值使用量。GetAllocationCount当前始终返回0。Allocate会尝试处理对齐,但当前实现通过“增加消耗大小”而不是“返回对齐后的指针”来处理 padding,因此不要过度依赖高阶自定义对齐保证。
线程语义
- 当前没有锁;应由调用方在单线程或外部同步前提下使用。
公开方法
| 方法 | 说明 |
|---|---|
| Constructor | 构造线性分配器。 |
| Destructor | 销毁分配器并释放底层缓冲。 |
| Allocate | 从当前偏移量分配一块内存。 |
| Free | 释放单个块;当前为空实现。 |
| Reallocate | 重分配块;当前返回 nullptr。 |
| Clear | 清空所有线性分配结果。 |
| GetMarker | 获取当前偏移标记。 |
| SetMarker | 回退或推进到指定偏移标记。 |
| GetUsedSize | 查询当前已用大小。 |
| GetCapacity | 查询总容量。 |
| GetName | 查询分配器名称。 |
| GetTotalAllocated | 查询当前已用字节数。 |
| GetTotalFreed | 查询累计释放量;当前固定为 0。 |
| GetPeakAllocated | 查询峰值分配量;当前返回容量。 |
| GetAllocationCount | 查询分配次数;当前固定为 0。 |