16 PoolMemoryResource(
void* buffer, std::size_t capacity, std::size_t blockSize, std::size_t blockAlignment =
sizeof(std::max_align_t))
26 new (header)
Header(
nullptr);
28 headPtr = &(header->
next);
30 buffer =
reinterpret_cast<std::byte*
>(buffer) +
sizeof(
Header) + blockSize;
31 capacity -=
sizeof(
Header) + blockSize;
53 virtual void*
allocateImp(std::size_t bytes, std::size_t alignment)
override {
55 throw std::bad_alloc();
58 void* allocatedBlock =
head_ + 1;
60 return allocatedBlock;
65 [[maybe_unused]] std::size_t bytes,
66 [[maybe_unused]] std::size_t alignment)
override {
A memory resource holder interface for the PolymorphicAllocator. Responsible for allocate and dealloc...
PoolMemoryResource(void *buffer, std::size_t capacity, std::size_t blockSize, std::size_t blockAlignment=sizeof(std::max_align_t))
virtual void * allocateImp(std::size_t bytes, std::size_t alignment) override
std::size_t blockAlignment_
virtual void deallocateImp(void *address, std::size_t bytes, std::size_t alignment) override
Header * alignWithHeader(std::size_t alignment, std::size_t size, void *&buffer, std::size_t &capacity) noexcept
Align the header + buffer to their corresponding alignments. If the capacity is not big enough,...