内联汇编(__asm)块是否可以阻止功能优化?

时间:2012-04-27 20:11:14

标签: c++ visual-c++ x86 inline-assembly

使用Microsoft Visual C ++(不是CLI,只是标准的本机C ++)时,内联汇编会导致函数禁用优化吗?

当我使用IDA检查时,块外部的一些功能代码似乎确实发生了变化,但我不确定原因是什么。该函数(相对)简单,包含位操作和一些数学运算,但没有外部调用。

我能想到的其他可能原因是:

  • 额外配置以启用内联汇编调试。
  • 异常处理的改变(虽然看起来并不像这样)
  • 由于某些未知的编译器逻辑而导致的其他内容的部分内联。

有什么想法吗?

1 个答案:

答案 0 :(得分:13)

是。请参阅MSDN文章:Optimizing Inline Assembly以及Advantages of Inline Assembly

来自文章:

  

函数中存在__asm块会以多种方式影响优化。首先,编译器不会尝试优化__asm块本身。你用汇编语言写的就是你得到的。其次,__ asm块的存在会影响寄存器变量存储。如果寄存器的内容将被__asm块更改,编译器将避免在__asm块中注册变量。最后,在函数中包含汇编语言会影响其他一些函数范围的优化。

相关问题