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

Pol*_*ial 5 c++ x86 inline-assembly visual-c++

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

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

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

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

有任何想法吗?

dir*_*tly 13

是.请参阅MSDN文章:优化内联汇编以及内联汇编的优势

来自文章:

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