begin process at 2008 08 22 04:10:55
1 229 768 membres
39 nouveaux aujourd'hui
14 267 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Un peu d'IL [ Système / Exécution ] (Julien237)

Un peu d'IL le 14/05/2008 16:28:31

Julien237
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 !


Julien.

Re : Un peu d'IL le 15/05/2008 08:42:57

leprov
Réponse acceptée !
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



Re : Un peu d'IL le 15/05/2008 09:21:20

Julien237
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.

Julien.

Re : Un peu d'IL le 22/07/2008 11:15:00

ShareVB
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


Classé sous : local, variable, at, stack, evaluation

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS