5

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

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

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

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

有任何想法吗?

4

1 回答 1

13

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

来自文章:

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

于 2012-04-27T20:17:21.943 回答