2.4 KiB
2.4 KiB
LinearAllocator
命名空间: XCEngine::Memory
类型: class
描述: 线性分配器,提供顺序分配和一次性释放的内存管理,适用于帧分配和临时对象。
概述
LinearAllocator 以顺序方式分配内存,每次分配都紧接在上一次分配之后。它不支持单个内存块的释放,只能通过 Clear() 一次性清空所有内存。这使得它非常适合作为帧分配器,每帧开始时 Clear 即可。
公共方法
构造/析构
| 方法 | 描述 |
|---|---|
explicit LinearAllocator(size_t size, IAllocator* parent = nullptr) |
构造函数,预分配指定大小的缓冲区 |
~LinearAllocator() |
析构函数,释放所有内存 |
IAllocator 实现
| 方法 | 描述 |
|---|---|
void* Allocate(size_t size, size_t alignment = 8) override |
顺序分配内存 |
void Free(void* ptr) override |
空操作(不支持单个释放) |
void* Reallocate(void* ptr, size_t newSize) override |
重新分配(总是分配新内存) |
线性操作
| 方法 | 描述 |
|---|---|
void Clear() |
清空所有分配,下一次分配从头开始 |
void* GetMarker() const |
获取当前分配位置标记 |
void SetMarker(void* marker) |
恢复到指定标记位置 |
状态查询
| 方法 | 描述 |
|---|---|
size_t GetUsedSize() const |
获取已使用的字节数 |
size_t GetCapacity() const |
获取总容量 |
统计
| 方法 | 描述 |
|---|---|
size_t GetTotalAllocated() const |
返回已使用字节数 |
size_t GetTotalFreed() const |
返回 0 |
size_t GetPeakAllocated() const |
返回容量大小 |
size_t GetAllocationCount() const |
返回 0 |
使用示例
// 创建 1MB 的线性分配器
auto allocator = std::make_unique<LinearAllocator>(1024 * 1024);
// 分配临时内存
void* ptr1 = allocator->Allocate(256);
void* ptr2 = allocator->Allocate(512);
void* ptr3 = allocator->Allocate(128);
// 保存标记
void* marker = allocator->GetMarker();
// 分配一些临时内存
void* temp = allocator->Allocate(64);
// 恢复到标记位置(释放 temp)
allocator->SetMarker(marker);
// 每帧结束时清空
allocator->Clear();
相关文档
- IAllocator - 分配器接口
- PoolAllocator - 内存池分配器
- ProxyAllocator - 代理分配器