# PoolAllocator **命名空间**: `XCEngine::Memory` **类型**: `class` **描述**: 内存池分配器,为固定大小的对象提供高效分配,消除内存碎片。 ## 概述 `PoolAllocator` 预分配一大块内存,并将其划分为等大小的内存块。它维护一个空闲块链表,分配时从链表中取出一块,释放时归还到链表。这使得分配和释放都是 O(1) 时间复杂度,非常适合需要频繁分配/释放同尺寸对象的场景(如对象池)。 ## 公共方法 ### 构造/析构 | 方法 | 描述 | |------|------| | `PoolAllocator(size_t blockSize, size_t poolSize, size_t alignment = 8)` | 构造函数 | | `~PoolAllocator()` | 析构函数 | ### IAllocator 实现 | 方法 | 描述 | |------|------| | `void* Allocate(size_t size, size_t alignment = 0) override` | 分配一个内存块(忽略 size 参数) | | `void Free(void* ptr) override` | 释放内存块 | | `void* Reallocate(void* ptr, size_t newSize) override` | 不支持,返回 nullptr | ### 内存块管理 | 方法 | 描述 | |------|------| | `bool Contains(void* ptr) const` | 检查指针是否属于此池 | | `size_t GetBlockSize() const` | 获取内存块大小 | | `size_t GetFreeBlockCount() const` | 获取空闲块数量 | | `size_t GetTotalBlockCount() const` | 获取总块数 | ### 统计 | 方法 | 描述 | |------|------| | `size_t GetTotalAllocated() const` | 已分配的字节数 | | `size_t GetTotalFreed() const` | 空闲块占用的字节数 | | `size_t GetPeakAllocated() const` | 总块数乘以块大小 | | `size_t GetAllocationCount() const` | 当前已分配块数 | ## 使用示例 ```cpp // 创建一个能分配 100 个 64 字节块的内存池 PoolAllocator pool(sizeof(MyObject), 100, alignof(MyObject)); // 分配(O(1)) void* block = pool.Allocate(); // 或者使用 Allocate(size) 但忽略 size void* block2 = pool.Allocate(sizeof(MyObject)); // 检查空闲块 printf("Free blocks: %zu\n", pool.GetFreeBlockCount()); // 释放(O(1)) pool.Free(block2); // 检查指针是否属于此池 if (pool.Contains(block)) { // ... } ``` ## 相关文档 - [IAllocator](./memory-allocator.md) - 分配器接口 - [LinearAllocator](./memory-linear-allocator.md) - 线性分配器 - [ProxyAllocator](./memory-proxy-allocator.md) - 代理分配器