2012-04-27 30 views
5

使用Microsoft Visual C++(不是CLI,只是标准的本地C++)时,是否禁用了内联汇编优化功能?内联汇编(__asm)块可否阻止函数优化?

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

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

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

任何想法?

回答

13

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

从文章:

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

+0

啊,所以它禁用*一些*,但不*所有*优化。这完全回答了我的问题。谢谢。 – Polynomial 2012-04-27 20:19:09