В настоящее время я пишу небольшой собственный распределитель памяти на C ++ и хочу использовать его вместе с перегрузкой операторов new
/ delete
. В любом случае, мой распределитель памяти в основном проверяет, превышает ли запрошенная память определенный порог, и, если это так, использует malloc для выделения запрошенного фрагмента памяти. В противном случае память будет обеспечиваться некоторыми fixedPool
распределителями. это обычно работает, но для моей функции освобождения выглядит так:
void MemoryManager::deallocate(void * _ptr, size_t _size){
if(_size > heapThreshold)
deallocHeap(_ptr);
else
deallocFixedPool(_ptr, _size);
}
Итак, мне нужно указать размер куска, на который нужно освободить место.
Теперь проблема в том, что ключевое слово delete не дает никаких подсказок о размере удаленного чанка, поэтому мне нужно что-то вроде этого:
void operator delete(void * _ptr, size_t _size){
MemoryManager::deallocate(_ptr, _size);
}
Но, насколько я могу судить, невозможно определить размер внутри оператора удаления. Если бы я хотел, чтобы все оставалось таким же, как сейчас, пришлось бы мне самому сохранять размер фрагментов памяти