Je vais par MSIL et en remarquant qu'il ya beaucoup de NOP instructions. L'article de MSDN indique qu'elles ne font rien et qu'elles sont utilisées pour remplir de l'espace si le code d'opération est corrigé. Ils sont beaucoup plus utilisés dans les versions de débogage que dans les versions de versions. Je sais que ce type d'énoncé est utilisé dans les langages d'assemblage pour s'assurer qu'un code d'opération convient à une limite de mot, mais pourquoi est-il nécessaire dans MSIL?
Réponses
Trop de publicités?Opr, servent à plusieurs fins:
- Ils permettent le débogueur pour placer un point d'arrêt sur une ligne, même si elle est combinée avec d'autres dans le code généré.
- Il permet au chargeur de patcher un saut avec une autre cible de la taille de l'offset.
- Il permet un bloc de code pour être aligné à une certaine limite, ce qui peut être bon pour la mise en cache.
- Il permet la liaison incrémentielle pour écraser les morceaux de code avec un appel à une nouvelle section, sans avoir à vous soucier de l'ensemble de la fonction de modification de taille.
Voici comment opr, sont utilisés par de débogage:
Opr, sont utilisés par la langue compilateurs (C#, VB, etc.) pour définir implicite de la séquence de points. Ces dites le compilateur JIT où pour s'assurer de la machine des instructions peuvent être mappés aux instructions IL.
Rick Byer de l'entrée de blog sur DebuggingModes.IgnoreSymbolStoreSequencePoints, explique quelques-uns des détails.
C# aussi des endroits Opr, après les instructions d'appel, de sorte que le retour de l'emplacement de la source est l'appel à l'extérieur plutôt que la ligne après l'appel.
Mec! No-op est génial! C'est une instruction qui ne fait que consommer du temps. Dans les périodes sombres, vous l'utiliseriez pour effectuer des micro-ajustements de la synchronisation dans les boucles critiques ou, plus important encore, comme ajout de précision dans le code à modification automatique.
Il peut également rendre le code de courir plus vite, lors de l'optimisation pour les processeurs spécifiques ou des architectures:
Les processeurs pour un long temps d'employer plusieurs pipelines qui fonctionnent à peu près en parallèle, afin que les deux instructions peuvent être exceuted en même temps. Sur un simple processeur à deux pipelines, le premier peut soutenir toutes les instructions, tandis que le second prend en charge uniquement un sous-ensemble. Aussi, il y a quelques stands entre les canalisations lorsque l'on doit attendre les résultats d'une instruction qui n'est pas encore terminée.
Dans ces circonstances, un dédié nop peut forcer l'instruction suivante dans un pipeline (le premier, pas le premier), et d'améliorer l'appariement de suivre les instructions de sorte que le coût de la nop est plus d'amorti.