# 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 | ## 使用示例 ```cpp // 创建 1MB 的线性分配器 auto allocator = std::make_unique(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](./memory-allocator.md) - 分配器接口 - [PoolAllocator](./memory-pool-allocator.md) - 内存池分配器 - [ProxyAllocator](./memory-proxy-allocator.md) - 代理分配器