https://www.machinet.net/tutorial-eng/understanding-cpp-allocator-model-efficient-memory-management