2009-04-22 7 views

Répondre

5

Chaque thread consomme une pile de taille fixe créée au démarrage du thread. Il est généralement de 512 K/1M mais c'est seulement la taille virtuelle au démarrage. Toutefois, pour les données allouées dynamiquement (malloc), il s'agit d'une information à l'échelle du processus, pas par thread. Notez que certaines implémentations de malloc alternatives (comme tcmalloc) pourraient fournir des statistiques plus avancées.

+0

Merci. Est-il possible de connaître la quantité de mémoire utilisée dans la pile? –

+0

Utilisez stackavail() s'il est supporté par votre compilateur – dmityugov

0

En outre, le système d'exploitation lui-même peut libérer de la mémoire dans un thread séparé, pour accélérer les appels à la fonction free(), ce qui rend la collecte des statistiques correctes encore plus compilcated

0

De ma propre expérience en utilisant la bibliothèque pthread, si un thread est créé avec des attributs par défaut, sa taille de pile est de 10 Mo. Cela peut être spécifique à la plate-forme.

Si vous souhaitez réduire la taille de la pile, vous pouvez utiliser pthread_attr_setstacksize(). Afin d'estimer une valeur correcte pour la taille de la pile, vous pouvez utiliser un script appelé "checkstack.pl". Il est livré dans les sources du noyau Linux (sous le répertoire "scripts").

Voir aussi http://www.kegel.com/stackcheck

Questions connexes