Ich schreibe derzeit einen kleinen benutzerdefinierten Speicher Allocator in C++, und möchte es zusammen mit Operator-Überladung von new
/ delete
. Wie auch immer, mein Speicher Allocator im Grunde prüft, ob der angeforderte Speicher über einen bestimmten Schwellenwert ist, und wenn ja verwendet malloc, um den angeforderten Speicher-Chunk zuzuweisen. Andernfalls wird der Speicher von einem fixedPool
Allokatoren. Das funktioniert im Allgemeinen, aber für meine Deallokationsfunktion sieht das so aus:
void MemoryManager::deallocate(void * _ptr, size_t _size){
if(_size > heapThreshold)
deallocHeap(_ptr);
else
deallocFixedPool(_ptr, _size);
}
Ich muss also die Größe des Chunks angeben, auf den verwiesen wird, um die Zuordnung an der richtigen Stelle aufzuheben.
Das Problem ist nun, dass das Schlüsselwort delete keinen Hinweis auf die Größe des gelöschten Chunks gibt, also bräuchte ich so etwas wie das hier:
void operator delete(void * _ptr, size_t _size){
MemoryManager::deallocate(_ptr, _size);
}
Aber soweit ich sehen kann, gibt es keine Möglichkeit, die Größe innerhalb des Löschoperators zu bestimmen - wenn ich die Dinge so belassen möchte, wie sie jetzt sind, müsste ich dann die Größe der Speicherchunks selbst speichern?