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

883 B

PoolAllocator::Free

把一个 block 放回空闲链表。

void Free(void* ptr) override;

行为说明

当前实现非常直接:

  1. 如果 ptr == nullptr,直接返回。
  2. ptr 视为 FreeNode*
  3. 把该节点插回空闲链表头部。
  4. m_freeBlocks 加一。

参数

  • ptr - 要归还的 block 指针。

返回值

  • 无。

当前实现限制

  • 不验证 ptr 是否真的来自当前池。
  • 不验证 ptr 是否位于 block 边界。
  • 不防止重复释放。
  • 如果把不属于当前池的地址传进来,可能破坏空闲链表甚至直接写坏任意内存。
  • 如果重复释放同一块,m_freeBlocks 可能大于 m_totalBlocks,随后统计接口会失真甚至发生无符号下溢。

相关文档