Files
XCEngine/docs/api/memory/linear-allocator/linear-allocator.md
ssdfasd 98c764bab9 docs: Fix memory module documentation discrepancies
- Add missing PoolAllocator class overview with methods table
- Add missing LinearAllocator class overview with methods table
- Add missing ProxyAllocator class overview with methods table
- Fix PoolAllocator::Allocate example code and comments
- Clarify ProxyAllocator::Free totalFreed calculation behavior
- Fix CreateLinearAllocator complexity from O(size) to O(1)
- Add note about Reallocate thread safety in ProxyAllocator
2026-03-19 00:48:44 +08:00

2.3 KiB
Raw Blame History

LinearAllocator

命名空间: XCEngine::Memory

类型: class

描述: 线性分配器,适合帧分配和临时对象。

概述

LinearAllocator 是一种顺序分配器,预分配一个大缓冲区,每次分配从缓冲区起始位置顺序分配,偏移量递增。它不适合需要释放任意块的场景,但分配和清除非常高效,常用于帧分配器。

公共方法

生命周期

方法 描述
LinearAllocator 构造线性分配器
~LinearAllocator 析构函数,释放底层缓冲区

内存操作

方法 描述
Allocate 顺序分配内存
Free 无效果(不支持)
Reallocate 不支持(始终返回 nullptr
Clear 清空所有分配

标记和回滚

方法 描述
GetMarker 获取当前位置标记
SetMarker 回滚到指定标记位置

查询方法

方法 描述
GetUsedSize 获取已使用字节数
GetCapacity 获取总容量

构造函数

explicit LinearAllocator(size_t size, IAllocator* parent = nullptr);
~LinearAllocator() override;

构造一个线性分配器,预分配指定大小的缓冲区。如果提供了 parent 分配器,则使用它分配底层缓冲区;否则使用系统默认分配(_aligned_malloc8 字节对齐)。

参数:

  • size - 预分配的缓冲区大小(字节数)
  • parent - 父分配器,用于分配底层缓冲区,默认为 nullptr(使用系统分配)

返回:

复杂度: O(n),需要分配 size 大小的缓冲区

注意: FreeReallocate 方法无实际效果。Free 是空操作,Reallocate 始终返回 nullptr

示例:

#include <XCEngine/Memory/LinearAllocator.h>

// 使用系统分配器创建 1MB 线性分配器
LinearAllocator allocator1(1024 * 1024);

// 使用指定的父分配器
IAllocator* parent = MemoryManager::Get().GetSystemAllocator();
LinearAllocator allocator2(1024 * 1024, parent);

// 默认 8 字节对齐
void* ptr = allocator1.Allocate(256);

相关文档