Der einzige Weg, um wirklich zu sagen, welcher Speicherzuordner für Ihre Anwendung richtig ist, ist, ein paar zu versuchen. Alle erwähnten Allokatoren wurden von intelligenten Leuten geschrieben und werden die anderen auf einer bestimmten Mikrobenmark oder der anderen schlagen. Wenn all Ihre Anwendung den ganzen Tag lang malloc ist ein 8-Byte-Chunk in Thread A und frei in Thread B, und braucht nichts anderes zu behandeln, könnten Sie wahrscheinlich einen Speicherzuordner schreiben, der die Hosen aus irgendeinem schlägt die bisher aufgeführten. Für viel mehr wird es nicht sehr nützlich sein. :)
Ich habe einige Erfahrung mit Hoard, wo ich arbeite (genug, so dass eine der eher unbekannten Bugs in der letzten 3.8 Release als Ergebnis dieser Erfahrung gefunden wurde).Es ist ein sehr guter Allokator - aber wie gut, für Sie, hängt von Ihrer Arbeitsbelastung ab. Und Sie müssen für Hoard bezahlen (obwohl es nicht zu teuer ist), um es in einem kommerziellen Projekt ohne GPL-Code zu verwenden.
Ein sehr leicht angepasster ptmalloc2 ist seit geraumer Zeit der Allokator hinter dem malloc von glibc und daher unglaublich weit verbreitet und getestet. Wenn Stabilität vor allem wichtig ist, könnte es eine gute Wahl sein, aber Sie haben es in Ihrer Liste nicht erwähnt, also nehme ich an, es ist out. Für bestimmte Workloads ist es schrecklich - aber das gleiche gilt für alle mallocs für allgemeine Zwecke.
Wenn Sie bereit sind, dafür zu zahlen (und der Preis ist vernünftig, nach meiner Erfahrung), SmartHeap SMP ist auch eine gute Wahl. Die meisten anderen genannten Allokatoren sind als Drop-In malloc/free new/delete-Ersetzungen konzipiert, die LD_PRELOAD'd sein können. SmartHeap kann auch auf diese Art und Weise verwendet werden, aber es enthält auch eine gesamte Zuteilungs-API, mit der Sie Ihre Zuteiler auf den Inhalt Ihres Herzens abstimmen können. In Tests, die wir durchgeführt haben (wiederum sehr spezifisch für eine bestimmte Anwendung), war SmartHeap ungefähr dasselbe wie Hoard für Leistung, wenn es als Drop-In-Malloc-Ersatz fungiert; Der wahre Unterschied zwischen den beiden ist der Grad der Anpassung. Sie können eine bessere Leistung erzielen, je weniger allgemein Sie Ihren Zuweiser benötigen.
Und abhängig von Ihrem Anwendungsfall ist ein Allzweck-Multithread-Allokator möglicherweise nicht das, was Sie überhaupt verwenden möchten. Wenn Sie ständig malloc sind & free'ing Objekte, die alle die gleiche Größe haben, möchten Sie vielleicht nur eine einfache Bramme Allokator schreiben. Die Slab-Zuweisung wird an mehreren Stellen im Linux-Kernel verwendet, die zu dieser Beschreibung passen. (Ich würde Ihnen ein paar nützliche Links geben, aber ich bin ein "neuer Benutzer" und Stack Overflow hat entschieden, dass neue Benutzer nicht zu sein können hilfreich alle in einer Antwort. Google kann jedoch gut genug aushelfen eine späte Antwort auf Ihre Frage, aber
warum mallocs tun, wenn Sie die Leistung hick ups haben
Welche spezifisches Problem (e) versuchen Sie mit dem aktuellen Standard-Heap-Manager zu lösen, die Sie verwenden? Und welches ist das? –
Überprüfen Sie in Ihrer Anwendung, ob Sie die Leistung mithilfe von lokalem Threadspeicher verbessern können. Wenn dies möglich ist, können die Gewinne besser sein als die Verwendung eines Multithread-Allokators. – trshiv