How to use the memory pool allocator, which pre-allocates a large block of memory and manages allocation manually in C++

1 Answer

0 votes
#include <iostream>
#include <vector>

class MemoryPool {
    char* pool;
    std::vector<void*> freeList;
    size_t blockSize;
    size_t poolSize;

public:
    MemoryPool(size_t blockSize, size_t poolSize)
        : blockSize(blockSize), poolSize(poolSize) {
        pool = new char[blockSize * poolSize];
        for (size_t i = 0; i < poolSize; ++i)
            freeList.push_back(pool + i * blockSize);
    }

    void* allocate() {
        if (freeList.empty()) return nullptr;
        void* ptr = freeList.back();
        freeList.pop_back();
        
        return ptr;
    }

    void deallocate(void* ptr) {
        freeList.push_back(ptr);
    }

    ~MemoryPool() {
        delete[] pool;
    }
};

struct MyObject {
    int x, y;
    float velocity;
};

int main() {
    MemoryPool pool(sizeof(MyObject), 1024);

    MyObject* obj1 = static_cast<MyObject*>(pool.allocate());
    obj1->x = 10;
    obj1->y = 20;
    obj1->velocity = 3.8;

    std::cout << "MyObject at (" << obj1->x << ", " << obj1->y << ") with velocity " << obj1->velocity << "\n";

    pool.deallocate(obj1);
}

  
  
/*
run:
  
MyObject at (10, 20) with velocity 5.5
  
*/

 



answered Sep 16, 2025 by avibootz

Related questions

1 answer 149 views
2 answers 237 views
1 answer 170 views
170 views asked Jul 26, 2017 by avibootz
1 answer 259 views
...