#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
*/