883 B
883 B
PoolAllocator::Free
把一个 block 放回空闲链表。
void Free(void* ptr) override;
行为说明
当前实现非常直接:
- 如果
ptr == nullptr,直接返回。 - 把
ptr视为FreeNode*。 - 把该节点插回空闲链表头部。
- 把
m_freeBlocks加一。
参数
ptr- 要归还的 block 指针。
返回值
- 无。
当前实现限制
- 不验证
ptr是否真的来自当前池。 - 不验证
ptr是否位于 block 边界。 - 不防止重复释放。
- 如果把不属于当前池的地址传进来,可能破坏空闲链表甚至直接写坏任意内存。
- 如果重复释放同一块,
m_freeBlocks可能大于m_totalBlocks,随后统计接口会失真甚至发生无符号下溢。