Inline

Signaler
Messages postés
252
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
1 mai 2005
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
salut

on dit que pour eviter un appel de fonction couteus en temps, il faut parfois faire des methodes inline ... pourquoi parfois et pas toujours?

7 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
couteux en temps, depend du nbr de params.
Si func 200 lignes appelees 50 fois, tu la mets inline, ton exe va avoir une taille terrible.
BruNews, ciao...
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
enfin... pas tout à fait !
car le compilateur effectue lui-même une étude de coût.
Le résultat est qu'il ne fera pas l'inline dans ce cas là (où la fonction est grosse).
Ce n'est d'ailleurs pas le seul cas où il ne fait rien :
- pointeur de fonction utilisé
-fonction récursive (VC++6 le fait jusqu'à une profondeur de 14)
Messages postés
252
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
1 mai 2005

le recursif avec VC, nous y voila ... comment on fait, avec VC++, qd on veut utiliser du recursif, mais qu'il risque d'y avoir un grand nombre d'appel sur la pile?
j'ai ecrit des algos qui tourent sans problemes qd ils sont compiles sous linux, et que VC++ arrive a compiler, mais est incapable d'executer (stack overflow) ...
c'est un peu lourd, parce qu'en iteratif, c'es vachement plus long et difficile a optimiser ...
au fait, c'est du a win ou a vc?
merci
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
J'ai peur de m'être mal exprimé ! et désolé si tu connais déjà tout ça mais :

le compilateur VC++6 n'est pas gêné par la récursion
Il ne tronque le nombre d'appels QUE dans le cas de inline

Si dans un programme tu as besoin de plus de pile, il suffit de le demander au linkeur
Project/Settings/Link/Category: output/Stack allocation:reserve xxxxxx
sinon en fait c'est l'horreur
Messages postés
252
Date d'inscription
mercredi 25 octobre 2000
Statut
Membre
Dernière intervention
1 mai 2005

non non tu ne t'es pas mal exprime, c'est juste que ma question a derive depuis l'origine!
en ce qui concerne l'augmentation de la taille de la pile, j'ai essaye, mais je ne sais pas trop comment "approximer" la valeur dont j'ai besoin. D'ailleurs, je sais pas du tout quelle valeur mettre ...
si tu peux m'aider la dessus
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
c'est assez difficile, tu as raison

Il existe des outils permettant de vérifier que la pile n'est pas crevée et même des switches de compilateur (/Ge /Gs)

Le plus simple est la méthode empirique : faire des essais / erreurs en accroissant progressivement la taille
Car sinon, il faut détecter le point du programme le plus consommateur de pile (souvent les recursions) , estimer le nombre de récursions tolérées, calculer tous les décalages de ESP pour charger les paramètres et les registres du stack frame...à peu près impossible !
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Salut les gars de retour dans votre discussion,
je pense que tout de meme, tant que faire se peut, le mieux est de transformer une recursive en iterative. Les gains en performance sont normalement importants.
BruNews, ciao...