void * allocate (std :: size_t pAmount)
выделяет pAmount памяти плюс место для хранения размера
|-size-|---- pAmount of memory-----|
^
|
«allocate» вернет указатель только что вставил поле размера.
void deallocate(void* pMemory)
переместит указатель обратно в начало
|-size-|---- pAmount of memory-----|
^
|
и освободи его.
1.)
std::size_t mySize = 0;
void * men = & mySize;
// same as: mySize = 42;
*static_cast<std::size_t*>(mem) = 42;
std::cout << mySize;
// prints "42"
2.)
`return static_cast<char*>(mem) + sizeof(std::size_t);
// casts void pointer mem to a char* so that you can do pointer arithmetic.
// same as
char *myPointer = (char*)mem;
// increment myPointer by the size of size_t
return myPointer + sizeof(std::size_t);
3.)
`void* mem = static_cast<char*>(pMemory) - sizeof(std::size_t);`
// mem points size of size_t before pMemory