Ich bin sicher, es gibt Tools für Windows, die Ihnen den Status eines Speichers geben können, aber dennoch sollten Sie Ihren Dienst mit diesem Problem im Hinterkopf entwickeln.
Zuerst sollten Sie verstehen, was sind die Zuweisungen, die Sie vorformulieren. Ich denke, der einfache Weg besteht darin, die neuen und delete-Operatoren zu überschreiben, und von diesen neuen Operatoren sollten Sie einige Statistiken Ihrer Zuordnungen zählen und dann die Standard-new- und delete-Operatoren Ihres Compilers aufrufen.
Die Mindeststatistik, die Sie meiner Meinung nach zählen sollten, sind die Anzahl der Zuweisungen von gemeinsamen Blockgrößenbereichen.
z.B. Blöcke zwischen 0 Bytes bis 15 Bytes, Blöcke zwischen 16 Bytes bis 32 Bytes, Blöcke zwischen 32 Bytes bis 48 Bytes, ...
Sie können auch die Anzahl der sequentiellen Zuordnung jeden Bereichsblockes Größe hinzufügen
Nachdem Sie diese Daten gesammelt haben, können Sie das Fragmentierungsproblem um reduzieren, indem Sie Ihre Blöcke auf die üblichen Größen ausrichten.
Die beste und einfache Technik für die Ausrichtung ist einen Block zu verwenden, die Potenz von 2
zum Beispiel ist eine Nummer am nächsten Zahl, das durch 16 dividieren auszurichten, können Sie die folgende Funktion verwenden:
int align(int size)
{
return ((size + 15) & ~0x0000000F);
}
Natürlich sollten Sie Ihre Statistiken verwenden, um die beste Potenz von 2 zum Ausrichten auszuwählen. Ziel ist es, eine Zahl zu erreichen, die die meisten Ihrer Zuweisungen in wenigen Blöcken erreichen, und gleichzeitig den Overhead der Ausrichtung angemessen zu halten.
Viel Glück ...
+1 Brammenzuteiler. – user7116
Das Ersetzen des Speichermanagers, nur um ihn zu messen, ist jedoch nutzlos, es sei denn, Sie verwenden diesen Speichermanager in der Produktion. Ich denke, eine bessere Lösung wäre, diesen tatsächlichen Speicherzuordner zu instrumentieren und seine Fragmentierung zu messen. Sie können dies tun, indem Sie die Alloc/Free-Anrufe umbrechen, oder Sie können sehen, ob der Speichermanager über Hooks verfügt, die Sie verwenden können. –