36 explicit MemoryPool(
size_t chunk_size = 1024) : chunk_size_(chunk_size) {}
41 ~MemoryPool() {
for (
auto* p : chunks_) ::operator
delete(p); }
55 if (free_list_ ==
nullptr) allocate_chunk();
56 T* p =
static_cast<T*
>(free_list_);
57 free_list_ = *
reinterpret_cast<void**
>(free_list_);
69 *
reinterpret_cast<void**
>(p) = free_list_;
77 void allocate_chunk() {
78 void* chunk = ::operator
new(chunk_size_ *
sizeof(T));
79 chunks_.push_back(chunk);
80 char* base =
static_cast<char*
>(chunk);
81 for (
size_t i = 0; i < chunk_size_; ++i) {
82 void* ptr = base + i *
sizeof(T);
83 *
reinterpret_cast<void**
>(ptr) = free_list_;
89 void* free_list_ =
nullptr;
90 std::vector<void*> chunks_;
MemoryPool(size_t chunk_size=1024)
构造内存池
~MemoryPool()
析构内存池,释放所有已分配的内存块
void deallocate(T *p, size_t=1)
将内存归还到池中
T * allocate(size_t n=1)
从池中分配 n 个 T 对象的内存