Files
XCEngine/docs/api/memory/memory-linear-allocator.md

2.4 KiB
Raw Blame History

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();

相关文档