2010-05-02 5 views
6

Je me demandais quel est l'allocateur de mémoire par défaut dans G ++ 4.4.1, sous Ubuntu 9.1. Je suis intéressé par la comparaison de différents allocateurs C++ dans un environnement multithread. Et où puis-je obtenir plus d'informations sur l'allocateur de mémoire par défaut?Quel est l'allocateur par défaut de G ++ 4.4.1?

EDIT: Je me réfère à nouveau et supprimer les opérateurs. La seule liaison est à la température ambiante et PTHREAD

Cordialement

+2

Eh bien, g ++ (le compilateur) ne décrochez pas vraiment l'allocateur - l'allocateur dépend de ce que vous liez avec (par défaut, l'implémentation dans libc). Cela dépend aussi de savoir si vous voulez dire malloc ou le nouvel opérateur. –

Répondre

1

G ++ créer des références à l'opérateur new() dans libstdC++ qui vient avec G ++. Cela à son tour utilise le malloc() défini dans la libc qui est installée sur votre système (généralement glibc).

La plupart des allocateurs de remplacement pointent l'un d'entre eux vers leur implémentation, généralement ils remplacent simplement malloc(). Par exemple, vous pouvez utiliser TC Malloc de Google en préchargeant simplement leur bibliothèque partagée. Aucun changement à l'application compilée nécessaire.

1

g ++ nouvel opérateur est en effet mis en œuvre en utilisant la glibc malloc.
L'allocation de mémoire elle-même est ensuite effectuée à l'aide de l'appel système unix standard mmap.

Vous pouvez obtenir plus d'informations sur votre mémoire allocateur utilisant mallinfo.
Voir Statistics-of-Malloc et Efficiency-and-Malloc pour plus d'informations.

2

Vous pouvez utiliser la variable LD_PRELOAD pour utiliser votre propre allocateur.
LD_PRELOAD = «/chemin/your_lib_exporting_malloc.so »

Exécution toute application dynamique liée à glibc dans le même terminal utilisera effectivement la mise en œuvre de malloc que vous avez fourni.
De nombreuses implémentations de malloc sont disponibles gratuitement.
* TLSF
* jemalloc
* dlmalloc (malloc Doug Lea, existe depuis toujours)
* ptmalloc2 (malloc Doug Lea, étendu pour supporter les arènes par thread.)
* TCMalloc (le malloc de Google, prétend être 6x plus rapide que ptmalloc2)
* nedmalloc (prétend être plus rapide que tcmalloc)
* Hoard, prétend également être très rapide
(source: Josh Haberman's blog)

Questions connexes