1.3 KiB
1.3 KiB
PoolAllocator::Allocate
从空闲链表中取出一个固定块。
void* Allocate(size_t size, size_t alignment = 0) override;
行为说明
当前实现按以下顺序执行:
- 如果空闲链表为空,返回
nullptr。 - 如果
size > m_blockSize,返回nullptr。 - 取出链表头节点,把
m_freeBlocks减一。 - 直接返回该节点地址。
需要特别注意:
alignment参数在当前实现中被完全忽略。- 只要
size <= m_blockSize,调用就会占用整个 block;不会按请求大小切分。 size == 0也会消耗一个 block。- 返回地址来自构造阶段预先切好的池,不会在调用时再次向系统堆申请内存。
参数
size- 请求大小;必须不大于构造时的blockSize。alignment- 调用期对齐要求;当前实现不使用它。
返回值
void*- 成功时返回一个 block 的起始地址;池已耗尽或请求过大时返回nullptr。
使用建议
- 把
size理解为“上界检查”而不是“真实占用字节数”。 - 如果调用方依赖逐次调用时的不同对齐要求,当前实现并不满足这种需求。