7 votes

Quelle est la meilleure solution pour remplacer un nouvel allocateur de mémoire dans un code existant ?

Ces derniers jours, j'ai obtenu quelques informations sur les allocateurs de mémoire autres que le standard malloc() . Certaines implémentations semblent être bien meilleures que les suivantes malloc() pour les applications comportant de nombreux fils. Par exemple, il semble que tcmalloc y ptmalloc ont de meilleures performances.

J'ai une application C++ qui utilise à la fois malloc y new opérateurs dans de nombreux endroits. Je pensais les remplacer par quelque chose comme ptmalloc peut améliorer ses performances. Mais je me demande comment le new l'opérateur agit-il lorsqu'il est utilisé dans une application C++ qui fonctionne sous Linux ? Utilise-t-il le comportement standard de malloc ou autre chose ?

Quelle est la meilleure façon de remplacer le new l'allocateur de mémoire avec l'ancien dans le code ? Existe-t-il un moyen de modifier le comportement ou le comportement de l'allocateur ? new y malloc ou dois-je remplacer tous les appels à eux un par un ?

2voto

Martin B Points 14919

De la Documentation sur TCMalloc :

Pour utiliser TCmalloc, il suffit de lier tcmalloc à votre application via l'indicateur de liaison "-ltcmalloc". Vous pouvez utiliser tcmalloc dans des applications que vous n'avez pas compilées vous-même, en utilisant LD_PRELOAD :

$ LD_PRELOAD="/usr/lib/libtcmalloc.so"

ptmalloc semble être similaire (mais si vous êtes sous Linux, vous l'utilisez probablement déjà) parce qu'il fait partie de la bibliothèque GNU C ).

Je m'attendrais operator new d'appeler malloc mais vous pouvez facilement vérifier par vous-même en plaçant un point d'arrêt sur malloc puis en appelant new . Si votre new n'appelle pas malloc , vous pouvez le redéfinir pour qu'il fasse .

1voto

alex tingle Points 3134

Si votre programme est multithread, alors l'option Hoard L'allocateur est très apprécié. Je pense personnellement qu'il ne vaut pas la peine de s'en préoccuper sous Linux, car glibc 's ptmalloc est déjà très bien.

0voto

vpram86 Points 3063

Je pense que le dépassement est tout à fait possible. Vous pouvez simplement lier votre application avec la nouvelle bibliothèque d'implémentation que vous voulez et tous les appels à new, malloc seront surchargés. Je ne l'ai pas fait. Mais je suppose que c'est possible car, lorsque vous utilisez valgrind, il utilise ses propres allocateurs de mémoire pour suivre les statistiques d'utilisation de la mémoire d'une application et produit le résultat à la fin. Donc, si c'est possible, il devrait y avoir un moyen.

Vérifiez ceci lien . Il contient des informations sur la bibliothèque smartheap qui est du même type !

0voto

AlexEzh Points 476

Combien de temps votre application passe-t-elle en allocation de mémoire ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X