Un peu d'IL

Résolu
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 - 14 mai 2008 à 16:28
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 22 juil. 2008 à 11:15
Bonjour,
J'insère dynamiquement un morceau d'IL dans un programme C#.
J'ai trouvé l'IL à insérer par mimétisme d'un modèle désassemblé.
Or voilà que dans cet IL je trouve les instructions
stloc.0
ldloc.0

La doc me dit :
stloc : Pops the current value from the top of the evaluation stack and stores it in a
the local variable list at index 0.
ldloc : Loads the local variable at a specific index onto the evaluation stack.

J'en conclus que je fais un pas en avant, un pas en arrière non ?
Et que supprimer ces deux opérations reviendrait au même et même accélèrerait mon code.

Un gourou de l'IL pourrait-il me le confirmer ?
Merci !

<hr size="2" width="100%" />Julien.

3 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
15 mai 2008 à 08:42
pourrais tu poster un extrait un peu plus long (avant et apres) de ce code? Je connais trop peu l'IL pour etre sur de moi, mais à priori je dirais que le but est de créer une copie de la variable à cet instant T. en bref, la valeur est stockée dans la variable en 0, cependant (a confirmer) l'instruction stloc doit "poper" la variable de la pile, alors que ldloc ne vide pas la variable.
Donc, ca permettrait d'avoir dans 0 la copie de cette valeur, soit parce qu'une fonction va utiliser cette variable après, mais qu'entre temps on veut la modifier, soit parce qu'on veut continuer a travailler sur la variable mais qu'ensuite on fera qqch de la valeur actuelle. Bref, je suis pas du tout sur de moi parce que je connais pas assez l'IL, donc prend pas ca pour acquis, mais en tous cas cest l'hypothèse que j'avancerais
3
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
15 mai 2008 à 09:21
Ah oui je ne l'avais pas vu comme ça, c'est en effet tout à fait plausible. Ici je n'utilise la variable qu'une fois et je peux me passer de ces instructions (vérifié), mais si je devais y accéder plusieurs fois je ne pourrais sans doute pas le faire.
En fait je pense que dans mon cas cette "non-optimisation" est restée pour garder une correspondance entre une instruction C# et un set d'instructions IL.
<hr size="2" width="100%" />Julien.
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
22 juil. 2008 à 11:15
salut,

j'ajouterais juste que le compilateur C# ne fait pas d'optimisation du code. L'optimisation est effectuée par le JIT. Donc effectivement, il peut souvent y avoir du code "en trop"...

ShareVB
0
Rejoignez-nous