size_t new_end = ((size_t) heap_end) + bytes;
Не хорошо , никогда не делайте таких вещей, вы предполагаете, что sizeof (size_t) == sizeof (void *), а также то, что происходит, если bytes==(size_t)(-1)
это не будет работать
Кроме того, вам необходимо убедиться, что возвращаемые вами указатели выровнены.
В противном случае у вас были бы проблемы. Поэтому вам нужно убедиться, что количество байт кратно 4 или 8 в зависимости от вашей платформы.
class {...
char *max_end,*head_end,*heap_start;
};
...
max_end=heap_start+size;
...
bytes=align_to_platform_specific_value(bytes);
if(max_end-heap_end >= bytes) {
void* output = (void*)heap_end;
heap_end+=bytes;
return output;
}
throw std::bad_alloc();
Предложение? Не изобретайте велосипед. Есть много хороших пул библиотек.