2009-07-07 7 views
0

J'ai probablement un débordement de pile dans mon application (bien sûr, seulement en mode release ...), et je voudrais y ajouter un code de protection/investigation. Je cherche une API Windows pour me dire l'état actuel d'une pile de threads (ie, la taille totale et la taille utilisée). quelqu'un?Comment vérifier l'état actuel de la pile de threads

thx Noam

Répondre

1

La taille totale de la pile sera la taille de la pile que vous avez demandé lorsque vous avez créé le fil (ou lié au programme si c'est le thread principal).

Il existe quelques références préliminaires pour obtenir la taille de pile pour un pool de threads dans Windows 7 sur MSDN (QueryThreadpoolStackInformation). En guise d'approximation, vous pouvez comparer l'adresse d'une variable locale avec l'adresse d'une autre variable locale plus bas dans la pile pour obtenir une mesure de la quantité us. Je crois que la façon dont un programme s'exécutant dans Windows choisit de placer ses variables locales dans l'espace de mémoire virtuelle alloué à un thread dépend de l'implémentation de l'exécution de cette langue, plutôt que de quelque chose que Windows connaît réellement; à la place, vous obtenez une exception lorsque vous tentez d'accéder à une adresse juste en dessous de la mémoire allouée à la pile. L'autre alternative à compliquer votre code avec une vérification si la pile a atteint une limite est d'ajouter un gestionnaire d'exception pour EXCEPTION_STACK_OVERFLOW, qui sera appelé par l'OS quand il vérifie que la pile a atteint sa limite. Il y a un exemple here.

Questions connexes