Files
XCEngine/docs/api/XCEngine/Memory/PoolAllocator/Allocate.md

1.3 KiB
Raw Blame History

PoolAllocator::Allocate

从空闲链表中取出一个固定块。

void* Allocate(size_t size, size_t alignment = 0) override;

行为说明

当前实现按以下顺序执行:

  1. 如果空闲链表为空,返回 nullptr
  2. 如果 size > m_blockSize,返回 nullptr
  3. 取出链表头节点,把 m_freeBlocks 减一。
  4. 直接返回该节点地址。

需要特别注意:

  • alignment 参数在当前实现中被完全忽略。
  • 只要 size <= m_blockSize,调用就会占用整个 block不会按请求大小切分。
  • size == 0 也会消耗一个 block。
  • 返回地址来自构造阶段预先切好的池,不会在调用时再次向系统堆申请内存。

参数

  • size - 请求大小;必须不大于构造时的 blockSize
  • alignment - 调用期对齐要求;当前实现不使用它。

返回值

  • void* - 成功时返回一个 block 的起始地址;池已耗尽或请求过大时返回 nullptr

使用建议

  • size 理解为“上界检查”而不是“真实占用字节数”。
  • 如果调用方依赖逐次调用时的不同对齐要求,当前实现并不满足这种需求。

相关文档