Der Fehler, der häufig gemacht wird, besteht darin, Ihre eigenen Allokatoren zu schreiben, damit Sie mehr Kontrolle darüber haben, wie viel Speicher von jedem System verwendet wird, und mehr Einblick in die aktuellen Vorgänge haben. Ein viel besserer Weg, dies zu erreichen, ist die Verwendung eines Speicherprofilers. Es gibt viele Speicher-Profiler, mein Profiler MemPro ist ein Beispiel. Dies ist eine völlig nicht-invasive Methode, um die Speichernutzung im Auge zu behalten, und Sie können sie mithilfe von Callstack-Platzhalterfiltern automatisch in Untersysteme aufteilen. Im Idealfall ist es am besten, die Speicherzuordnung und die Speicherverfolgung vollständig getrennt zu halten, da sie ganz unterschiedliche Anforderungen haben.
Die willkürliche Aufteilung Ihres Speichers in Pools kann oft nachteilig sein, da jeder Pool einen Overhead hat. Sie können am Ende viel mehr Speicher verwenden, als Sie benötigen, ohne es zu bemerken. Um die Verschwendung zu reduzieren, ist es immer besser, alles zusammenzufassen, der Spielraum wird dann vom gesamten System geteilt.
Die einzigen Gründe für die Verwendung benutzerdefinierter Zuordnungen sind die CPU-Leistung (hauptsächlich aus Gründen der Cache-Kohärenz) und die Begrenzung der Fragmentierung. Ein perfektes Beispiel dafür ist ein Partikelsystem. Sie möchten, dass alle Partikel im Speicher zusammenhängend sind, und Sie möchten den Hauptspeicher nicht mit vielen kurzlebigen Zuweisungen überschütten. Ein weiteres gutes Beispiel für das Abschotten ist eine Skriptsprache.
Wenn Sie ein Beispiel für einen Allzweck-Malloc-Ersatz wünschen, können Sie sich meinen VMem-Allokator ansehen . Es wurde in einer Reihe von ausgelieferten AAA-Spielen verwendet. Es verfügt über Techniken, die die Fragmentierung begrenzen und den Speicherbedarf gering halten, was für Konsolenspiele von entscheidender Bedeutung ist. Es ist auch sehr schnell unter hohem Thread-Konflikt. Meine Website enthält umfangreiche Dokumentationen zu diesen Techniken.