我正在查看 MSIL 并注意到有很多 nop MSIL 中的说明。
MSDN 文章称,如果操作码被修补,它们不会采取任何操作,而是用于填充空间。它们在调试版本中的使用比发布版本中的使用要多得多。
我知道汇编语言中使用此类语句来对齐后面的指令,但为什么 MSIL 中需要 MSIL nops?
(编者注:接受的答案是关于机器代码 NOP,而不是问题最初询问的 MSIL/CIL NOP。)
最佳答案
NOP 有多种用途:
- 它们允许调试器在一行上放置断点,即使它与生成的代码中的其他断点组合在一起也是如此。
- 它允许加载器使用不同大小的目标偏移量来修补跳转。
- 它允许代码块在特定边界对齐,这有利于缓存。
- 它允许增量链接通过调用新部分来覆盖代码块,而不必担心整体函数大小的变化。
关于assembly - CIL nop 操作码的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/234906/