Bonjour,
dans un projet je me retrouve dans un cas o� plusieurs fonctions pourraient s�appeler mutuellement et former un cercle :
Evidemment le probl�me avec ce genre de code, c'est qu'il g�n�re une sorte d'arbre :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13 void fonction1(params){ ... fonction2(); } void fonction2(){ ... userCallback(); //appelle userFunction() } void userFunction(){ ... fonction1(); }
fonction1{
fonction2{
fonction3{
fonction1{
fonction2{
...
et puis au bout d'un moment stack overflow alors j'ai tout de suite oubli� l'id�e.
J'avais commenc� � g�rer �a avec des threads mais comme ce serais beaucoup plus simple et plus efficace de le faire avec la premi�re m�thode, je suis quand m�me all� chercher au cas o�... je suis tomb� sur une certaine "tail optimization", il semblerait que certains compilateurs transforment le "call" en "jump" quand l'appel est la derni�re instruction de la fonction, ce qui corrige le probl�me.
Oui je sais c'est pas ce qu'il y a de plus propre comme code mais c'est ce qu'il y a de plus rapide et contourner cette m�thode rendrais probablement le code 10x plus complexe.
Mais la question est (ou plut�t les questions) : Est-ce que �a marche dans mon cas ?
dans tous les exemple que j'ai trouv�, les fonctions n'�taient pas des "void", la derni�re ligne �tait donc toujours quelque chose comme "return fonction(p);" dans mon cas les fonctions sont de type void, est-ce que appeler la fonction suffit ou je dois �crire quelque chose comme "return fonction();"
J'utilise visual studio, est-ce que le compilateur r�alise l'optimisation ? si oui et-ce qu'il faut param�trer quelque chose avant j'avais vu qu'en g�n�ral l'optimisation de ne fait qu'en release, si c'est le cas peut-on la forcer ?
Merci de votre aide.
Partager