J'ai un programme c++ avec une forte recursivité. Quand j'execute mon
programme, tout ce passe apparement bien (pas de plantage en tout cas),
mais pourtant, je suis sur qu'il ne s'execute pas jusqu'au bout.
On Mon, 30 Mar 2009 15:57:54 +0200, jeremie fouche :
Une trop grande recursivité peut elle stopper l'execution d'un programme (dépassement de la pile probablement) sans informer l'utilisateur ?
Ça dépend du compilo, et des options de compilations.
Sous VC++, avec les options par défaut, oui, ça m'est déjà arrivé.
jeremie fouche
Fabien LE LEZ a écrit :
On Mon, 30 Mar 2009 15:57:54 +0200, jeremie fouche :
Une trop grande recursivité peut elle stopper l'execution d'un programme (dépassement de la pile probablement) sans informer l'utilisateur ?
Ça dépend du compilo, et des options de compilations.
Sous VC++, avec les options par défaut, oui, ça m'est déjà arrivé.
J'utilise g++ 3.4.5, avec et sans option de debug (-g), le bon vieux -Wall, et c'est tout. Bon, je prends ça pour un oui, et je vais voir si je peux utiliser une autre technique... -- Jérémie
Fabien LE LEZ a écrit :
On Mon, 30 Mar 2009 15:57:54 +0200, jeremie fouche <jfouche@voila.fr>:
Une trop grande recursivité peut elle stopper l'execution d'un programme
(dépassement de la pile probablement) sans informer l'utilisateur ?
Ça dépend du compilo, et des options de compilations.
Sous VC++, avec les options par défaut, oui, ça m'est déjà arrivé.
J'utilise g++ 3.4.5, avec et sans option de debug (-g), le bon vieux
-Wall, et c'est tout.
Bon, je prends ça pour un oui, et je vais voir si je peux utiliser une
autre technique...
--
Jérémie
On Mon, 30 Mar 2009 15:57:54 +0200, jeremie fouche :
Une trop grande recursivité peut elle stopper l'execution d'un programme (dépassement de la pile probablement) sans informer l'utilisateur ?
Ça dépend du compilo, et des options de compilations.
Sous VC++, avec les options par défaut, oui, ça m'est déjà arrivé.
J'utilise g++ 3.4.5, avec et sans option de debug (-g), le bon vieux -Wall, et c'est tout. Bon, je prends ça pour un oui, et je vais voir si je peux utiliser une autre technique... -- Jérémie
jeremie fouche
Fabien LE LEZ a écrit :
On Mon, 30 Mar 2009 15:57:54 +0200, jeremie fouche :
Une trop grande recursivité peut elle stopper l'execution d'un programme (dépassement de la pile probablement) sans informer l'utilisateur ?
Ça dépend du compilo, et des options de compilations.
Sous VC++, avec les options par défaut, oui, ça m'est déjà arrivé.
J'utilise g++ 3.4.5, avec et sans option de debug (-g), le bon vieux -Wall, et c'est tout. Des options supplementaires permettent elles de passer outre ? Bon, je prends ça pour un oui, et je vais voir si je peux utiliser une autre technique... -- Jérémie
Fabien LE LEZ a écrit :
On Mon, 30 Mar 2009 15:57:54 +0200, jeremie fouche <jfouche@voila.fr>:
Une trop grande recursivité peut elle stopper l'execution d'un programme
(dépassement de la pile probablement) sans informer l'utilisateur ?
Ça dépend du compilo, et des options de compilations.
Sous VC++, avec les options par défaut, oui, ça m'est déjà arrivé.
J'utilise g++ 3.4.5, avec et sans option de debug (-g), le bon vieux
-Wall, et c'est tout.
Des options supplementaires permettent elles de passer outre ?
Bon, je prends ça pour un oui, et je vais voir si je peux utiliser une
autre technique...
--
Jérémie
On Mon, 30 Mar 2009 15:57:54 +0200, jeremie fouche :
Une trop grande recursivité peut elle stopper l'execution d'un programme (dépassement de la pile probablement) sans informer l'utilisateur ?
Ça dépend du compilo, et des options de compilations.
Sous VC++, avec les options par défaut, oui, ça m'est déjà arrivé.
J'utilise g++ 3.4.5, avec et sans option de debug (-g), le bon vieux -Wall, et c'est tout. Des options supplementaires permettent elles de passer outre ? Bon, je prends ça pour un oui, et je vais voir si je peux utiliser une autre technique... -- Jérémie
jeremie fouche
Fabien LE LEZ a écrit :
On Mon, 30 Mar 2009 15:57:54 +0200, jeremie fouche :
Une trop grande recursivité peut elle stopper l'execution d'un programme (dépassement de la pile probablement) sans informer l'utilisateur ?
Ça dépend du compilo, et des options de compilations.
Sous VC++, avec les options par défaut, oui, ça m'est déjà arrivé.
J'utilise g++ 3.4.5, avec et sans option de debug (-g), le bon vieux -Wall, et c'est tout. Bon, je prends ça pour un oui, et je vais voir si je peux utiliser une autre technique... (m'arrange pas, ça) Des options supplementaires permettent elles de passer outre ? -- Jérémie
Fabien LE LEZ a écrit :
On Mon, 30 Mar 2009 15:57:54 +0200, jeremie fouche <jfouche@voila.fr>:
Une trop grande recursivité peut elle stopper l'execution d'un programme
(dépassement de la pile probablement) sans informer l'utilisateur ?
Ça dépend du compilo, et des options de compilations.
Sous VC++, avec les options par défaut, oui, ça m'est déjà arrivé.
J'utilise g++ 3.4.5, avec et sans option de debug (-g), le bon vieux
-Wall, et c'est tout.
Bon, je prends ça pour un oui, et je vais voir si je peux utiliser une
autre technique... (m'arrange pas, ça)
Des options supplementaires permettent elles de passer outre ?
--
Jérémie
On Mon, 30 Mar 2009 15:57:54 +0200, jeremie fouche :
Une trop grande recursivité peut elle stopper l'execution d'un programme (dépassement de la pile probablement) sans informer l'utilisateur ?
Ça dépend du compilo, et des options de compilations.
Sous VC++, avec les options par défaut, oui, ça m'est déjà arrivé.
J'utilise g++ 3.4.5, avec et sans option de debug (-g), le bon vieux -Wall, et c'est tout. Bon, je prends ça pour un oui, et je vais voir si je peux utiliser une autre technique... (m'arrange pas, ça) Des options supplementaires permettent elles de passer outre ? -- Jérémie
pjb
jeremie fouche writes:
Fabien LE LEZ a écrit :
On Mon, 30 Mar 2009 15:57:54 +0200, jeremie fouche :
Une trop grande recursivité peut elle stopper l'execution d'un programme (dépassement de la pile probablement) sans informer l'utilisateur ?
Ça dépend du compilo, et des options de compilations.
Sous VC++, avec les options par défaut, oui, ça m'est déjà arrivé.
J'utilise g++ 3.4.5, avec et sans option de debug (-g), le bon vieux -Wall, et c'est tout. Bon, je prends ça pour un oui, et je vais voir si je peux utiliser une autre technique... (m'arrange pas, ça) Des options supplementaires permettent elles de passer outre ?
On Mon, 30 Mar 2009 15:57:54 +0200, jeremie fouche <jfouche@voila.fr>:
Une trop grande recursivité peut elle stopper l'execution d'un
programme (dépassement de la pile probablement) sans informer
l'utilisateur ?
Ça dépend du compilo, et des options de compilations.
Sous VC++, avec les options par défaut, oui, ça m'est déjà arrivé.
J'utilise g++ 3.4.5, avec et sans option de debug (-g), le bon vieux
-Wall, et c'est tout.
Bon, je prends ça pour un oui, et je vais voir si je peux utiliser une
autre technique... (m'arrange pas, ça)
Des options supplementaires permettent elles de passer outre ?
On Mon, 30 Mar 2009 15:57:54 +0200, jeremie fouche :
Une trop grande recursivité peut elle stopper l'execution d'un programme (dépassement de la pile probablement) sans informer l'utilisateur ?
Ça dépend du compilo, et des options de compilations.
Sous VC++, avec les options par défaut, oui, ça m'est déjà arrivé.
J'utilise g++ 3.4.5, avec et sans option de debug (-g), le bon vieux -Wall, et c'est tout. Bon, je prends ça pour un oui, et je vais voir si je peux utiliser une autre technique... (m'arrange pas, ça) Des options supplementaires permettent elles de passer outre ?
Si tu faisais en sorte que l'appel récursif soit terminal, le compilateur gcc pourrait alors l'optimiser et éviter d'utiliser trop de pile.
Je pense que le compilo a deja fait un travail pour que la fonction ne soit pas récursive sinon le programme terminerait... mal par un stack overflow.
Je pense que le problème est que la condition d'arret de la condition d'arret de la fonction récursive (que l'on a pas dans la demande) est fausse voire inexistante. Sans plus de detail, on ne peut trancher...
Notons qu'avec VS5, avant le SP1, j'avais eu le problème d'une optimisation qui transformait ma récursion pour la limiter mais qui foirait le test d'arret... J'ai mis un certain temps à comprendre que c'était un bug du compilo (qui n'apparaissait pas en DEBUG). Là, j'ai un doute sur le fait que se soit cela...
Doms.
Bonjour,
Si tu faisais en sorte que l'appel récursif soit terminal, le
compilateur gcc pourrait alors l'optimiser et éviter d'utiliser trop
de pile.
Je pense que le compilo a deja fait un travail pour que
la fonction ne soit pas récursive sinon le programme terminerait... mal
par un stack overflow.
Je pense que le problème est que la condition d'arret de la condition
d'arret de la fonction récursive (que l'on a pas dans la demande) est fausse
voire inexistante. Sans plus de detail, on ne peut trancher...
Notons qu'avec VS5, avant le SP1, j'avais eu le problème d'une optimisation
qui transformait ma récursion pour la limiter mais qui foirait le test d'arret... J'ai
mis un certain temps à comprendre que c'était un bug du compilo (qui n'apparaissait
pas en DEBUG). Là, j'ai un doute sur le fait que se soit cela...
Si tu faisais en sorte que l'appel récursif soit terminal, le compilateur gcc pourrait alors l'optimiser et éviter d'utiliser trop de pile.
Je pense que le compilo a deja fait un travail pour que la fonction ne soit pas récursive sinon le programme terminerait... mal par un stack overflow.
Je pense que le problème est que la condition d'arret de la condition d'arret de la fonction récursive (que l'on a pas dans la demande) est fausse voire inexistante. Sans plus de detail, on ne peut trancher...
Notons qu'avec VS5, avant le SP1, j'avais eu le problème d'une optimisation qui transformait ma récursion pour la limiter mais qui foirait le test d'arret... J'ai mis un certain temps à comprendre que c'était un bug du compilo (qui n'apparaissait pas en DEBUG). Là, j'ai un doute sur le fait que se soit cela...
Doms.
James Kanze
On Mar 30, 3:57 pm, jeremie fouche wrote:
Peut être suis-je hors sujet...
Non.
J'ai un programme c++ avec une forte recursivité. Quand j'execute mon programme, tout ce passe apparement bien (pas de plantage en tout cas), mais pourtant, je suis sur qu'il ne s'execute pas jusqu'au bout.
Je vois bien DEBUT, mais je ne vois pas FIN, alors que je n'ai aucun message, et que le programme m'a rendu la main.
Une trop grande recursivité peut elle stopper l'execution d'un programme (dépassement de la pile probablement) sans informer l'utilisateur ?
Selon la norme : si tu épuises les ressources du système, tu as un comportement indéfini. Donc, oui. Formellement, au moins, tout peut arriver. Du point de vue de qualité de l'implémentation, je m'attendrais à un core dump, ou son équivalent sous Windows. (Au minimum : en fait, je préfèrerais un abort propre, avec message d'erreur.)
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Mar 30, 3:57 pm, jeremie fouche <jfou...@voila.fr> wrote:
Peut être suis-je hors sujet...
Non.
J'ai un programme c++ avec une forte recursivité. Quand
j'execute mon programme, tout ce passe apparement bien (pas de
plantage en tout cas), mais pourtant, je suis sur qu'il ne
s'execute pas jusqu'au bout.
Je vois bien DEBUT, mais je ne vois pas FIN, alors que je n'ai
aucun message, et que le programme m'a rendu la main.
Une trop grande recursivité peut elle stopper l'execution d'un
programme (dépassement de la pile probablement) sans informer
l'utilisateur ?
Selon la norme : si tu épuises les ressources du système, tu as
un comportement indéfini. Donc, oui. Formellement, au moins,
tout peut arriver. Du point de vue de qualité de
l'implémentation, je m'attendrais à un core dump, ou son
équivalent sous Windows. (Au minimum : en fait, je préfèrerais
un abort propre, avec message d'erreur.)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
J'ai un programme c++ avec une forte recursivité. Quand j'execute mon programme, tout ce passe apparement bien (pas de plantage en tout cas), mais pourtant, je suis sur qu'il ne s'execute pas jusqu'au bout.
Je vois bien DEBUT, mais je ne vois pas FIN, alors que je n'ai aucun message, et que le programme m'a rendu la main.
Une trop grande recursivité peut elle stopper l'execution d'un programme (dépassement de la pile probablement) sans informer l'utilisateur ?
Selon la norme : si tu épuises les ressources du système, tu as un comportement indéfini. Donc, oui. Formellement, au moins, tout peut arriver. Du point de vue de qualité de l'implémentation, je m'attendrais à un core dump, ou son équivalent sous Windows. (Au minimum : en fait, je préfèrerais un abort propre, avec message d'erreur.)
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
jeremie fouche
jeremie fouche a écrit :
Bonjour
Peut être suis-je hors sujet...
J'ai un programme c++ avec une forte recursivité. Quand j'execute mon programme, tout ce passe apparement bien (pas de plantage en tout cas), mais pourtant, je suis sur qu'il ne s'execute pas jusqu'au bout.
Je vois bien DEBUT, mais je ne vois pas FIN, alors que je n'ai aucun message, et que le programme m'a rendu la main.
Une trop grande recursivité peut elle stopper l'execution d'un programme (dépassement de la pile probablement) sans informer l'utilisateur ?
Merci pour vos lumières
Merci pour vos réponses
Je n'ai pas trouvé l'origine du problème, mais en cassant la récursivité afin de ne plus en avoir, mon programme fonctionne correctement, (et prend beaucoup mois de ressources).
-- Jérémie
jeremie fouche a écrit :
Bonjour
Peut être suis-je hors sujet...
J'ai un programme c++ avec une forte recursivité. Quand j'execute mon
programme, tout ce passe apparement bien (pas de plantage en tout cas),
mais pourtant, je suis sur qu'il ne s'execute pas jusqu'au bout.
Je vois bien DEBUT, mais je ne vois pas FIN, alors que je n'ai aucun
message, et que le programme m'a rendu la main.
Une trop grande recursivité peut elle stopper l'execution d'un programme
(dépassement de la pile probablement) sans informer l'utilisateur ?
Merci pour vos lumières
Merci pour vos réponses
Je n'ai pas trouvé l'origine du problème, mais en cassant la récursivité
afin de ne plus en avoir, mon programme fonctionne correctement, (et
prend beaucoup mois de ressources).
J'ai un programme c++ avec une forte recursivité. Quand j'execute mon programme, tout ce passe apparement bien (pas de plantage en tout cas), mais pourtant, je suis sur qu'il ne s'execute pas jusqu'au bout.
Je vois bien DEBUT, mais je ne vois pas FIN, alors que je n'ai aucun message, et que le programme m'a rendu la main.
Une trop grande recursivité peut elle stopper l'execution d'un programme (dépassement de la pile probablement) sans informer l'utilisateur ?
Merci pour vos lumières
Merci pour vos réponses
Je n'ai pas trouvé l'origine du problème, mais en cassant la récursivité afin de ne plus en avoir, mon programme fonctionne correctement, (et prend beaucoup mois de ressources).