Inline

cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005 - 10 avril 2003 à 13:20
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 10 avril 2003 à 20:37
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 avril 2003 à 13:33
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...
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
10 avril 2003 à 14:08
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)
0
cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
10 avril 2003 à 16:09
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
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
10 avril 2003 à 16:31
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
10 avril 2003 à 18:30
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
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
10 avril 2003 à 19:15
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 !
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 avril 2003 à 20:37
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...
0
Rejoignez-nous