82 votes

Quel est l'objectif de l'opcode nop?

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?

110voto

Anthony Williams Points 28904

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.

12voto

Steve Steiner Points 4044

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.

9voto

harpo Points 17399

Il fournit une opportunité pour les marqueurs basés sur la ligne (par exemple, les points d'arrêt) dans le code lorsqu'une version release n'en émettrait aucun.

6voto

plinth Points 26817

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.

6voto

peterchen Points 21792

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X