A simple & high performance object pool using modern C++
Go to file
2024-03-01 17:20:08 -05:00
.idea allocPool: First commit 2024-03-01 14:21:52 -05:00
.clang-format allocPool: First commit 2024-03-01 14:21:52 -05:00
.gitignore allocPool: Fix threading issue and add benchmark. 2024-03-01 16:30:51 -05:00
allocPool.hpp allocPool: Add destructor which cleans up. 2024-03-01 17:19:40 -05:00
CMakeLists.txt Meta: Turn on asan 2024-03-01 17:20:08 -05:00
main.cpp allocPool: Add destructor which cleans up. 2024-03-01 17:19:40 -05:00
README.md allocPool: Fix threading issue and add benchmark. 2024-03-01 16:30:51 -05:00
tests.cpp allocPool: Fix threading issue and add benchmark. 2024-03-01 16:30:51 -05:00
tests.hpp allocPool: Fix threading issue and add benchmark. 2024-03-01 16:30:51 -05:00

allocPool - A simple & high performance object pool using modern C++

This is allocPool, a pool of objects in a single header file that allow you to avoid expensive allocations during runtime. This preallocates objects in the constructor (with threads) then offers you two functions: getPtr() and returnPtr(ptr).

Using C++ concepts, we can use templates and require the class given to have a default constructor and to have a .reset() function. It will be used to clean the objects before giving them to another caller.

This pool uses a hashmap and a pivot to make returnPtr(ptr) extremely fast.

It will automatically grow when the max capacity is reached, though there will be a performance penalty.

Performance

With a simple stub class and a pool of 10000 objects, using the pool to take a pointer and give it back takes 3 ms vs 19 ms when allocating and deallocating by hand.

class stub {
public:
    stub() {
        for (int j{}; j < 1000; j++) { i++; }
    };
    void reset() {}

private:
    int i = 15;
};