La seule façon de vraiment dire ce qui allocateur de mémoire qui est bon pour votre application est d'essayer quelques-unes. Tous les allocateurs mentionnés ont été écrits par des gens intelligents et l'emporter sur les autres sur une microbenchmark ou d'une autre. Si votre application fait tout au long de la journée est un malloc de 8 octets morceau de fil Un et gratuit et cela dans le fil B, et n'a pas besoin de gérer quoi que ce soit d'autre, vous pourrait probablement écrire un allocateur de mémoire qui bat le pantalon large de l'un de ceux énumérés jusqu'à présent. Il ne veut tout simplement pas être très utile pour beaucoup de chose. :)
J'ai une certaine expérience à l'aide de Thésauriser où je travaille (suffisamment pour que l'un des plus obscurs de bugs question dans la récente version 3.8 a été trouvé comme un résultat de cette expérience). C'est un très bon programme d'allocation - mais comment bon, pour vous, dépend de votre charge de travail. Et vous n'avez à payer pour Thésauriser (même si c'est pas trop cher) pour l'utiliser dans un projet commercial sans GPL avec votre code.
Très légèrement adapté ptmalloc2 a été l'allocateur derrière la glibc malloc pour un certain temps maintenant, et il est donc extrêmement largement utilisé et testé. Si la stabilité est importante au-dessus de toutes choses, il pourrait être un bon choix, mais vous ne mentionnez pas dans votre liste, donc je vais supposer qu'il est out. Pour certaines charges de travail, c'est terrible - mais la même chose est vraie de tout usage général malloc.
Si vous êtes prêt à payer pour cela (et le prix est raisonnable, dans mon expérience), SmartHeap SMP est également un bon choix. La plupart des autres allocateurs mentionnés sont conçus comme des "drop-in" malloc/free nouveau/supprimer les remplacements qui peuvent être LD_PRELOAD avais. SmartHeap peut être utilisé de cette façon, en tant que bien, mais il comprend aussi toute une allocation liée à l'API qui vous permet d'affiner votre allocateurs au contenu de votre coeur. Dans les tests que nous avons fait (encore une fois, très spécifiques à une application en particulier), SmartHeap était environ le même que Thésauriser pour la performance lorsqu'ils agissent comme un malloc de remplacement; la vraie différence entre les deux est le degré de personnalisation. Vous pouvez obtenir de meilleures performances, moins d'usage général, vous avez besoin de votre allocateur de l'être.
Et selon votre cas d'utilisation, d'un usage général multithread allocateur pourrait ne pas être ce que vous voulez utiliser à tous; si vous êtes constamment malloc et free avec des objets qui sont toutes de la même taille, vous pouvez simplement écrire une simple dalle de l'allocateur. Dalle de répartition est utilisée dans plusieurs endroits dans le noyau Linux qui correspondent à cette description. (Je voudrais vous donner quelques liens utiles, mais je suis un "nouvel utilisateur" et de Dépassement de Pile a décidé que les nouveaux utilisateurs ne sont pas autorisés à être trop utile à tous dans une seule réponse. Google peuvent aider à sortir assez bien, cependant).