Un peu d'IL [Résolu]

Signaler
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
-
ShareVB
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
-
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

Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
16
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
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
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.
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
11
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